库存查询优化问题

jalor_6 2011-09-23 12:45:54
请教大家一个问题,关于数据库库存查询的问题
采购、生产、移库、销售、报价、任务、财务等各功能都要查询库存,有些查询的库存为一个大类商品,现其中有多表数据量已达几十万条,查询得出的结果越来越慢,因为之前的库存没有库存表,所以要得到库存就是采购、生产、移库、销售的数量加减得出库存。如果要重新设计,怎样设计库存查询让与库存相关的查询速度加快。(各表索引都已添加,不需考虑这个问题)
另,听有人用存储过程,临时表的方法读写库存,会不会在数据量大,客户端多的时候,产生死锁?
想听听大家对库存设计的一些方法!
...全文
142 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-09-23
  • 打赏
  • 举报
回复
表数据量已达几十万条,查询得出的结果越来越慢
---------
用分區表,或分區索引試試

jalor_6 2011-09-23
  • 打赏
  • 举报
回复
我现在的做法也是根据NBDBA说的做的,增加了库存表,修改了程序,查出最近保存库存点,再加减这段时间内的业务变动数据即是库存,加减过程用程序实现(做好了才发现,用程序来实现其实挺繁琐的)
如果这个加减过程做到数据库里,程序直接读取最后的库存结果,那么肯定需要一个存储过程或另一个临时库存表来实现,在多个客户端出现同时查库存的时候,会不会产生死锁?
如果不会,可能我下一步就要把这个做到数据库里了。
duanzhi1984 2011-09-23
  • 打赏
  • 举报
回复
楼上的是可行的,但必须要求仓库每月进行盘点,就看业务担位能否按这个做。
顺便说下,这样财务作数据时,就可以按盘点表进行计算。我们公司 就是这样做的。
每月盘点其实挺烦的。必须要求生产现场停下才能盘点,否则不是很准确的。
NBDBA 2011-09-23
  • 打赏
  • 举报
回复
提供个思路给你吧

1、你设计一个月结库存表(或者日结库存表、周结、旬结度可以),这个表主要就是结算时间、物料编号、仓库号,库存数量等。
2、这个表定时(按月、日、周或者旬)统计当前库存来写入。可以作业进行。
3、统计和查询逻辑都改为,先取最近日期的月结库存表数据+最近月结时间后入数量(包括采购入库、生产入库、移入、取消出库等等)-最近月结时间后出数量(一样包括所有出)

这样既减少了计算量(月结的话最多计算一个月数据),程序修改也不多(原来算法增加一个取最近月结库存数据动作),考虑下。


jalor_6 2011-09-23
  • 打赏
  • 举报
回复
我这里十几个大类,上百小类,商品名称有8千多个,十几个仓库,在重要的商品库存方面,库存准确率是非常高的,我们每个商品是有独立的序列的,所以我这里不光是库存查询,还有库存序列查询,输入任何序列就知道它在哪个库。
如果按你说的建立的库存表,只能查今天的,也就是最新库存,无法解决查询历史库存问题。
比如公司采购部在重要节日时,要根据历年同比库存,决定采购多少商品,根据历年库存,查询各商品历年报价。如财务部根据上月底库存,列财务报表等,公司很多帐务不是当月做当月,而且当月做上个月的财务报表,所以用到历史库存为依据,有时候跟客户往来如果帐对不上,还可以查历史库存等。
duanzhi1984 2011-09-23
  • 打赏
  • 举报
回复
建立定时计算肯定不现实,因为无法做到实时库存。领导查询库存表时肯定是希望能够查看最新的库存。
duanzhi1984 2011-09-23
  • 打赏
  • 举报
回复
我不知道你们公司的仓库的库存准确率是多少。反正我们公司的库存准确率能达到98%以上。公司有上千多种材料,共十几个仓库。

我觉得你们要建立两个表即可完成此问题
一个交易记录表、一个是库存表。

所有与库存相关的表【采购、生产、移库、销售等】
在审核后将记录写入到交易记录表中,主要体现单据类别、入库日期、材料、数量、进出口类型、时间等。并即时更新库存表。
在反审时则删除相就的交易记录,并更新库存表。

所以后期其他单位要查询库存时,只要查询库存表即可。而不需要查询所有的库存相关表进行重新计算。
这样不慢才怪,而且会越来越慢,业务人员会意见越来越大。
xxjltan 2011-09-23
  • 打赏
  • 举报
回复
个人认为一打记录内可以储存不同类别的库存结果,采购库存,销售库存等等...
Mr_Nice 2011-09-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 nbdba 的回复:]

关键库存表是必须的,不能到所有表查询计算

另外,别看到优化两个字就分区表,几十万数据,而且设计明显缺陷的说分区表实在是太早了
[/Quote]

单独建立一个库存表。建立定时作业,将每日的信息进行汇总处理进来。

另外,对应当前的这些表,像1楼说的做分区可以提高性能。 当然索引也是要及时维护的。
jalor_6 2011-09-23
  • 打赏
  • 举报
回复
库存在数据库管理方面是也是容易碰到的吧,希望能听到更多的声音,不管有没有帮助,大家就当讨论一下。
采购、生产、移库、销售等各表本身设计上没有太大问题,就是当各表数据量大了,库存查询及与库存相关的查询慢了,希望有弄过数据量大的人来说说
jalor_6 2011-09-23
  • 打赏
  • 举报
回复
不是,采购有采购的表,销售有销售的表,各功能都有自己的表,只是表里面数据量大了,库存肯定只与采购,生产,移库,销售有关,其它的数据查询需要调用库存数据,因为没有库存的东西就不需要价格,任务以及财务相关的数据,每次查询库存,肯定与采购,生产,移库,销售的数量有关,所以数据量一大,慢也就看得出来了
NBDBA 2011-09-23
  • 打赏
  • 举报
回复
关键库存表是必须的,不能到所有表查询计算

另外,别看到优化两个字就分区表,几十万数据,而且设计明显缺陷的说分区表实在是太早了
--小F-- 2011-09-23
  • 打赏
  • 举报
回复
你这么多东西全部写在一个表里面么 ??

可以考虑分拆成N个表啊

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧