以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]大数据量的表达式应用问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=119632)

--  作者:chnfo
--  发布时间:2018/5/29 9:17:00
--  [求助]大数据量的表达式应用问题
一个项目中有多个表。
如A与B通过AID关联,B中有一些列设有表达式,如X.expression = Parent(AB).X等等  
B与C通过BID关联,C表中也有一些表达式,如X.expression = Parent(BC).X  

B与D通过BID关联,C与D通过CID关联,D表的X.expression = IIF([CID] is  Null ,Parent(BD).X,Parent(CD).X)

但在实际使用时,发现一个问题。
就是A表的数据达到上万行,B表的数据可能有3万行,C表的数据可能有5万行,D表的数据可能也有3万左右的时候,启动系统奇慢无比。

即使在使用了加载的条件_identify is null,仍然效果不佳,大致测了一下,打开项目需要40秒左右。

初步分析了一下
1、是数据库设计不合理(比如将D表分开为BD和CD两个表,分别只做BD关联和CD关联)
2、表达式列太多?
3、表的加载顺序有问题?例如按ABCD的顺序加载表,或按DCBA的顺序加载表,效率也大不相同?
4、先把所有表的表达式列清空,待数据全部load之后,再重设表达式?而且表达式也要按表的关联的顺序来重设?

如何改进?
[此贴子已经被作者于2018/5/29 9:19:53编辑过]

--  作者:有点甜
--  发布时间:2018/5/29 9:25:00
--  

表达式列太多,特别是引用父表、统计子表的表达式,不能太多。

 

如果可能,尽量改成用数据列,而不是表达式列。

 

如果确实要用,看看 http://www.foxtable.com/webhelp/scr/1935.htm

 


--  作者:chnfo
--  发布时间:2018/5/29 9:32:00
--  
你的意思是:主要是表达式列的影响?

如果用数据列,会不会有下面的这种麻烦?
1、数据量大了之后,冗余明显,同步修改会有麻烦。
2、初始加载的量比较大,可能效率也不高。
3、保存数据的时候效率可能也低

目前一般的表达式都是Parent(BD).X,基本上不涉及到计算,尤其是 数量 * Parent(BD).单价这种
[此贴子已经被作者于2018/5/29 9:35:07编辑过]

--  作者:有点甜
--  发布时间:2018/5/29 9:35:00
--  
那你尝试表达式列留空,表格数据加载完毕,afterOpenProject事件,再给每个表、列设置公式。
--  作者:chnfo
--  发布时间:2018/5/29 11:25:00
--  
先加载子表的表达式列,再加载主表的表达式列会有影响吗?
还是应当按先主后子的顺序加载表达式?

--  作者:有点甜
--  发布时间:2018/5/29 11:57:00
--  
以下是引用chnfo在2018/5/29 11:25:00的发言:
先加载子表的表达式列,再加载主表的表达式列会有影响吗?
还是应当按先主后子的顺序加载表达式?

 

加载完全部表数据以后,直接设置表达式即可,没有顺序问题。