以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]大数据量的表达式应用问题 (http://foxtable.net/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的发言:
先加载子表的表达式列,再加载主表的表达式列会有影响吗? 还是应当按先主后子的顺序加载表达式?
加载完全部表数据以后,直接设置表达式即可,没有顺序问题。 |