那年,我负责维护一家食品企业的一个内部销售管理系统。在经销商库存管理模块,有经销商库存产品生产日期管理功能, 如下是登记页面, 业务描述为,根据当天对经销商的产品库存的盘点,记录各产品在不同生产日期的库存量,从而可以了解产品的库存新鲜度,这在供应链和库存管理上是一个很重要的概念。

database中有2张表,列举主要字段如下表:

 

字段名

字段类型

说明

经销商库存表

Sale_Ty

PK:EffDt+CustCd+PrdCd

EffDt

Char(8)

盘库日期,存储的数据格式如“20120217”

CustCd

Char(8)

经销商编号

PrdCd

Char(7)

产品编号

RealQty

Decimal(9,1)

盘库库存量(所有生产日期的)

库存产品生产日期表

SalPrdDate_Td

PK:EffDt+CustCd+PrdCd+PrdDate

EffDt

Char(8)

盘库日期,存储的数据格式如“20120217”

CustCd

Char(8)

经销商编号

PrdCd

Char(7)

产品编号

PrdDate

Char(8)

产品的生产日期,存储的数据格式如“20120217”

RealQty

Decimal(9,1)

产品在该生产日期的库存量

目前系统大约有经销商3000家,产品80条。

Sale_Ty存放经销商的每日库存, 即每天约产生3000*80=24w条记录;

由于每月要对所有经销商做库存产品生产日期登记, 则每个月SalPrdDate_Td要产生24w*N(假定N=4)=160w条记录。

在表优化方面,对Sale_Ty按年做了分区。

在查询以上登记信息时,出现性能瓶颈, 先看展示页面:

摘写Stored Procedure中主要Sql如下:

 1 SELECT  2     AREA1C, AREA1D,  AREA2C, AREA2D,  CASE WHEN @FLDLIST & 8 = 8 THEN AREA3C ELSE '' END AREA3C, AREA3D,  3     CASE WHEN @FLDLIST & 256 = 256 THEN B.CustCd ELSE '' END CustCd, 4     CASE WHEN @FLDLIST & 256 = 256 THEN B.CusDsc ELSE '' END CusDsc, 5     P.PrdKind, PrdKindNm,  P.PrdCls1, PrdCls1Nm,  PrdNm,  6     E.PrdDate, 7     SUM(A.RealQty) RealQty, SUM(ISNULL(E.RealQty, A.RealQty)) SalPrdRealQty 8 FROM Sale_Ty A 9 INNER JOIN SALDB..Customer_Bh B ON A.CustCd = B.CustCd10 INNER JOIN #DEPT D ON B.DeptCd = D.AREA3C11 INNER JOIN #PRD P ON A.PrdCd = P.PrdCd12 LEFT OUTER JOIN SalPrdDate_Td E ON A.EffDt = E.EffDt AND A.CustCd = E.CustCd AND A.PrdCd = E.PrdCd13 WHERE A.EffDt = @EffDt14     AND A.CustCd LIKE CASE WHEN @CUSTCD = '1' THEN '%' ELSE @CUSTCD END15 GROUP BY E.PrdDate,16     AREA1C, AREA1D,  AREA2C, AREA2D,  CASE WHEN @FLDLIST & 8 = 8 THEN AREA3C ELSE '' END, AREA3D,17     CASE WHEN @FLDLIST & 256 = 256 THEN B.CustCd ELSE '' END,18     CASE WHEN @FLDLIST & 256 = 256 THEN B.CusDsc ELSE '' END, 19     P.PrdKind, PrdKindNm,  P.PrdCls1, PrdCls1Nm,  PrdNm

每次点查询,即执行Stored Procedure时,duration约为5min,用户不能容忍

优化为:在where中的A.EffDt = @EffDt后面加入如下条件:

AND E.EffDt = @EffDt

优化后,duration为不超过5seconds,用户反响很好。

以上性能优化日期2010年3月8日

转载于:https://www.cnblogs.com/buguge/archive/2012/02/17/2356364.html

库存产品日期查询功能sql优化相关推荐

  1. 提高SQL查询效率(SQL优化)

    我们要做到不但会写SQL,还要做到写出性能优良的SQL语句. (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句 ...

  2. 分页查询的SQL优化

    分页查询SQL优化 一.问题背景 二.优化思路 三.进一步 四.总结 一.问题背景 在数据库中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否 ...

  3. 百万数据使用子查询进行SQL优化

    操作: 查询条件放到子查询中,子查询只查主键ID,然后使用子查询中确定的主键关联查询其他的属性字段. 原理: 减少回表操作. 适用场景:使用limit分页查询 -- 优化前SQL SELECT 各种字 ...

  4. 记Oracle regexp_substr 一拆多查询缓慢sql优化

    需求简化描述: Oralce 一条数据按照特定格式拆分成多行数据 如:1:2:3 拆分成: 1 2 3 源数据如图: 最开始我是这么写的 SELECT DISTINCTREGEXP_SUBSTR( h ...

  5. Delete带有子查询的sql优化,改为innerJoin解决

    delete语句很慢,明明有索引也不走 DELETE FROM r_verify_result where ID_RULE_INFO in (select t2.ID_RULE_INFO from   ...

  6. 浅谈 AnalyticDB SQL 优化

    浅谈 AnalyticDB SQL 优化 前言 ADB计算引擎 ADB优化器 ADB索引 ADB SQL开发与表分区设计 ADB SQL开发的性能指南 ADB慢SQL的定位和常见原因 ADB慢SQL优 ...

  7. MySQL——MySQL的数据查询功能

    MySQL的数据查询功能 SQL查询的7个关键词--以链家二手房数据为例 在实际工作中,使用最多的就是数据库的查询功能了.在数据查询过程中,通常会用到以下7个核心关键词: SELECT <sel ...

  8. 拼装sql_2020最新最全面的SQL优化干货总结

    作者:_陈哈哈原文:https://sohu.gg/FGG98i BATJTMD 等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直不变的重点就是对 SQL 优化经验的考察.一提到数据库,面试官 ...

  9. SQL Server 2016 查询存储性能优化小结

    SQL Server 2016已经发布了有半年多,相信还有很多小伙伴还没有开始使用,今天我们来谈谈SQL Server 2016 查询存储性能优化,希望大家能够喜欢 作为一个DBA,排除SQL Ser ...

最新文章

  1. 模拟频率和数字频率的区别
  2. 编程实现灰度处理函数
  3. eclipse下使用maven配置库托管jar包
  4. mysql增备脚本--xtrabackup实现
  5. 必应输入法(桌面版)软件分析和用户需求调查
  6. 2017.8.10 树上染色 失败总结
  7. python的变量在使用前不需要先赋值_在赋值Python之前引用的另一个局部变量
  8. 实现当前月记录,下12个月发送提醒。蛋疼的2月.
  9. 编译原理第五章课后题
  10. otdr进行多种测试鸿蒙包括,OTDR 测试
  11. CMOS集成电路设计基础(孙肖子版)第二章课后答案
  12. Windows PE(WinPE)
  13. PHP实现地址自动识别的功能实例
  14. 学习 CSAPP 对工作有帮助吗?一切从底层逻辑开始!
  15. FINN(三)BNN在FPGA上的准确性和峰值性能
  16. 警方通报“济南1家6口死亡”案:男子杀害亲人后放火跳楼
  17. [安全分享]斗鱼360补天沙龙分享-跨域资源那些事
  18. 图像处理——特征检测涉及到的数据结构和匹配方法
  19. 微信支付/退费(服务商)模式
  20. 电脑软件没运行,内存爆满可以这样解决

热门文章

  1. WAMP下解决localhost可以访问但IP地址无法访问的问题
  2. mysql大批量数据写入_存储过程写入大批量数据,用于测试mysql查询优化
  3. 用Redis存储Tomcat集群的Session
  4. SSH框架整合——基于XML配置文件
  5. Struts标签入门
  6. 求C n m(从n个数中选m个数,有多少种组合?问题)暴力—递归——回归数学公式,三种方法,层层优化!
  7. QT 008 UI Add action 的方法
  8. 太原理工大学自考计算机应用难,太原理工大学人工智能精彩试题+问题详解
  9. lsoci mysql_flask项目从sqlite3升级的mysql数据库
  10. 查看pcl版本 linux,Ubuntu16上安装PCL