首页 新闻 会员 周边

库存历史价格

0
悬赏园豆:30 [已关闭问题] 关闭于 2012-11-08 20:21

需求:在系统中,需要查询货品在查询当时的价格,比如1号进货,3号修改了价格,那么在1,2号的时候查询的价格都要是1号的,3号之后查询的价格要是3号修改之后的,修改不限次数。

 

当前状况:设计一个表,用来记录货品的修改历史,通过自定义一个sql函数,作用是根据传入的货品编码和查询日期到这个表取相对日期的价格

 

结果:查询速度比用sql函数之前慢4-5倍,在b/s来说导致的就是超时。

 

大家有没有做过类似的需求,是怎么解决的,谢谢。

清海扬波的主页 清海扬波 | 小虾三级 | 园豆:825
提问于:2012-10-08 13:38
< >
分享
所有回答(2)
0

你还是设计一张表,这表有简单的数据,货物编号,修改前的价格,修改后的价格,修改时间,这样你查询的时候,直接去这个表中查询,然后得到信息,显示,如果这个表中显示的信息不全,你可以再加点字段,争取查询的时候,读取一张表就可以完成。也就是允许数据冗余的出现来减少join的出现。

chenping2008 | 园豆:9836 (大侠五级) | 2012-10-08 13:44

现在就是这样做的,但是join实现不了,所以就用的函数,结果就是速度慢。

支持(0) 反对(0) 清海扬波 | 园豆:825 (小虾三级) | 2012-10-08 13:56

@清海扬波: 你可以增加字段,不需要join

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-10-09 09:01
0

理论上楼主的设计不会造成速度相差4-5。

为什么JOIN实现不了,楼主列出你的语句,及基本的表结构。可以使用JOIN关联。
如果使用的函数的话?是使用表值函数?表值函数在返回的数据量大的情况下,速度比较慢,不行就用存储过程返回价格结果集。

acepro | 园豆:1218 (小虾三级) | 2012-10-08 18:11

不能用join是因为这个表记录的是货品某“几个字段”的变化,其实这个价格也就是一个数值列,这几个字段的变化都存在这个里面,所以在查询的时候得分字段查,就不能join一个结果集了,不然就出现

join(select price from tb where colname='col1')

join(select price from tb where colname='col2')

join(select price from tb where colname='col3') 这样速度可能更慢,要不然就是临时表,这个已经试过了,速度也差不多。

支持(0) 反对(0) 清海扬波 | 园豆:825 (小虾三级) | 2012-10-10 11:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册