以文本方式查看主题

-  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=191564)

--  作者:chnfo
--  发布时间:2024/4/22 13:49:00
--  [求助]表达式列的影响
例如商品目录表,原来已经有1000种商品,而且在商品出入库记录中引用了商品ID,如商品编号、名称、规格、单位是用表达式,使用公式给它们赋值,如Parent(商品_出入库).编号等

现在再导入另外2000种新商品,会不会因为“表达式列的影响”而导致系统响应时间长?

如果有影响的话,那么表达式列使用就会有很大障碍了,只能做数据库冗余……
[此贴子已经被作者于2024/4/22 13:50:52编辑过]

--  作者:有点蓝
--  发布时间:2024/4/22 14:13:00
--  
有表达式的时候测试导入,和没有表达式的时候测试导入。看看分别导入的时间就知道了


--  作者:chnfo
--  发布时间:2024/4/22 21:50:00
--  
实测背景:
1、原来的物料表有1000行,出入库记录有10000行(只引用了这1000行的物料ID),而且出入库记录中通过物料ID做表关联设置了表达式,表达式列包括物料名称、规格、单位
2、新merge物料2000行(原来已经有的1000行不包括在内)

实际运行结果:
不论出入库记录是否设置了表达式,merge的效率都在3秒左右,短的用时2.3秒,长的用时接近3秒。

所以我的猜测是:
如果父表插入新数据,而不是修改既有父表的列数据,则子表虽然引用了父表数据,但不会对运行效率有影响,因为这时候子表并没有引用新数据
但如果批量修改已经被子表引用的父表数据,则可能会有影响,所以,进行了下面的测试

另外的测试
1、出入库不设置表达式
物料表从加载空表,到加载全部明细1000行,耗时0.36秒
2、出入库设置表达式
物料表从加载空表,到加载全部明细1000行,耗时1.8秒
似乎重新加载主表,而子表引用主表数据,影响也并非完全不可接受地慢
--结论:从这个意义上说,如果子表只是引用主表数据,而不做其它的四则运算,表达式列的影响似乎也没有几百倍的差距
所以,我在想“表达式列的影响”这一节,真正影响效率的是引用后的四则运算,而不是表达式的公式,例如只是引用主表的单价,那么主表单价发生变化,那么子表显示新的主表单价,并不会导致什么超级慢的情况发生

官方在这一节的帮助,有点误导嫌疑,之前我看到这一节以后,一直不敢随便使用表达式,就象示例所说,我只是根据引用的物料编号,给名称、规格、单位做表达式赋值,而它们几乎不参与任何运算,所以,即使主表的例如名称做了批量修改(这种情况发生的概率其实是非常低的),影响也几乎可以忽略不计,毕竟0.4秒和1.8秒这种差异,并无什么明显感觉
[此贴子已经被作者于2024/4/22 22:18:34编辑过]

--  作者:有点蓝
--  发布时间:2024/4/22 22:06:00
--  
确实如此。表达式引用的列数据没有变化,就不会触发表达式计算