以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]表达式列的影响 (http://foxtable.net/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 -- 确实如此。表达式引用的列数据没有变化,就不会触发表达式计算 |