日期:2014-05-17  浏览次数:20487 次

进销存库存结构设计,视图性能
好久没在csdn上发帖子了,公司运营一个网上订货的系统,最开始的时候是是有一个库存表,每次业务更新库存,这样的好处是查询实时库存速度很快,但是到盘点的时候总有误差,特别是业务修改涉及到的操作更多,后来改成只保留盘点期初值,然后通过一个业务视图把和库存想关的业务汇总起来,通过盘点期初数和业务视图来进行计算,这样的好处是库存准确,有业务修改,库存也会自动更正过来,因为库存是实时计算出来的,但是这样性能比较差,数据量稍微一大就查询很慢,用的sql2008,大概也就100万数据量,后来分析发现是因为视图不能利用基表的索引造成性能低下,想请教一下有没合理的折中方案。
------解决方案--------------------
可以考虑通过存储过程控制参数的输入,从而个性化地返回数据。我不认为视图的性能很好,除非使用索引视图。但是索引视图同样有诸多限制
------解决方案--------------------
有误差是因为你该开事务处理的地方没有开事务处理

视图慢你可以定时跑一个job啥的,提前把数据生成好放到一个表中
------解决方案--------------------
视图的性能真的不敢恭维  可不可以用临时表代替之?
------解决方案--------------------
引用:
好久没在csdn上发帖子了,公司运营一个网上订货的系统,最开始的时候是是有一个库存表,每次业务更新库存,这样的好处是查询实时库存速度很快,但是到盘点的时候总有误差,特别是业务修改涉及到的操作更多,后来改成只保留盘点期初值,然后通过一个业务视图把和库存想关的业务汇总起来,通过盘点期初数和业务视图来进行计算,这样的好处是库存准确,有业务修改,库存也会自动更正过来,因为库存是实……


第一种方法,如果运用好事务处理的话,应该可以避免。(推荐)
第二种方法,业务增加的话,汇总数据将会大大增加,DB会压力变大。
------解决方案--------------------
第一种方法本身 就挺好的 ,误差是进销存系统难以避免的。抽盘或全盘时 校正就可以了。
如果实在不爽,就改成每天晚上跑出一个库存表,然后用业务发生做个视图 这样视图数据量比较小 。
基表里 日期做聚合索引  速度杠杠的。。。
------解决方案--------------------
引用:
公司的业务表有:盘点表,入库表,出货表,零售表,退货表,仓库表,
视图:和库存所有相关的业务都关联到这个表了,就是一个所有产品的业务日志视图,另外,每一笔业务都涉及到两方,一个增加库存方,一个是减少库存方,这样的话如果在基本业务表一条记录在视图里面就变成了两条记录,业务表如果有100万数据,视图中就有200w
其中仓库表只是记录从何时开始计算,也就是盘点时间
这样的……

库存都是从原始社会开始算,速度上去才怪。昨日结存表+今日发生视图 速度。。。