重现步骤

【进销存数据校验核对】-调拨出库 选择仓库后点击查询按钮 超时

[步骤]


[结果]


[期望]


历史记录  
  1. 2022-04-28 19:53:52, 由 qihaoran 创建。
  2. 2022-04-29 09:13:28, 由 许瑞丰 指派给 陈少军。
    修改了 指派给,旧值为 "xuruifeng",新值为 "chenshaojun"。


    SELECT COUNT(1) FROM (

    select
    tep.WareHouseID
    --,rbwh.WareHouseName
    --,tep.SKU                          
    --,tep.PackageID
    --,tep.OutPutNum
    --,tep.OriginBillNumber
    --,tep.OperateNum  as SumOperateNum
    --,tep.InWareHouseID
    --,inwh.WareHouseName as InWareHouseName
    --,tep.DifferenceNum
    --,ilog.OperateNum
    --,ilog.BillNumber
    --,ilog.OperateTime   
    from
    (
    select
    ISNULL(wk.CustomerID,pu.CustomerID) CustomerID,  
    ISNULL(wk.WareHouseID,pu.WareHouseID) WareHouseID,
    pu.InWareHouseID,
    ISNULL(wk.SKU,pu.SKU) SKU,
    ISNULL(wk.PackageID,PU.PackageID) PackageID,
    ISNULL(wk.OutPutNum,0) OutPutNum,
    ISNULL(wk.AllocationNumber,pu.OriginBillNumber) OriginBillNumber,   
    ABS(ISNULL(pu.OperateNum,0)) OperateNum,
    ABS(ISNULL(wk.OutPutNum,0)-ABS(ISNULL(pu.OperateNum,0))) as DifferenceNum
    from
    ( select
    put.CustomerID
    ,put.WareHouseID
    ,put.SKU
    ,ordl.PackageID
    ,bl.AllocationNumber
    ,SUM(put.OutPutNum) OutPutNum
    from
    RB_WareHouse_Product_OutPut_Log put with(NOLOCK)
    left join RB_Procurement_Order_Package_OrderDetail ordl with(NOLOCK)
    on put.CustomerID=ordl.CustomerID  and put.OrderListID=ordl.OrderListID
    left join RB_Inventory_AllocationDetailBill bill with(NOLOCK) on bill.CustomerID=ordl.CustomerID and bill.SKU=ordl.SKU and bill.OrderListID=ordl.OrderListID
    left join RB_Inventory_AllocationBill bl with(NOLOCK) on bill.AllocationBillID=bl.ID
    left join RB_OrderInfo ordi with(NOLOCK)
    on put.CustomerID=ordi.CustomerID and put.WareHouseID=ordi.WareHouseID and put.OrderCode=ordi.OrderCode
    where  ordi.IsStockOrder=1  and bl.Status<>3 and bl.Status<>4
    and put.CustomerID=1
    and put.OutTime>='2022-03-28'  and put.OutTime< DATEADD(DAY,1,'2022-04-28')  and put.WareHouseID in (1100000,2,279,333,336,687,1185,2205,3216,3584,3922,4316,5312,7056,7057,7085,7556,7590)   group by put.CustomerID,put.WareHouseID,put.SKU,ordl.PackageID,bl.AllocationNumber
    ) wk full join
    ( select  
    inv.CustomerID,
    inv.WareHouseID,
    bill.InWareHouseID,
    inv.SKU,
    pagd.PackageID,
    inv.OriginBillNumber,
    SUM(inv.OperateNum) OperateNum
    from  
    RB_Inventory_DetailLog inv with(NOLOCK)
    left join RB_Procurement_Order_Package_OrderDetail pagd with(NOLOCK) on inv.CustomerID=pagd.CustomerID and inv.OrderListID=pagd.OrderListID
    left join RB_Inventory_AllocationBill bill with(NOLOCK) on inv.CustomerID=bill.CustomerID and inv.OriginBillNumber=bill.AllocationNumber and inv.WareHouseID=bill.OutWareHouseID
    where inv.BillType=5   and inv.CustomerID=1      and inv.OperateTime>='2022-03-28'  and inv.OperateTime< DATEADD(DAY,1,'2022-04-28')  and inv.WareHouseID in  (1100000,2,279,333,336,687,1185,2205,3216,3584,3922,4316,5312,7056,7057,7085,7556,7590)   group by inv.CustomerID,inv.WareHouseID,bill.InWareHouseID,inv.SKU,pagd.PackageID,inv.OriginBillNumber
    ) pu on wk.WareHouseID=pu.WareHouseID and wk.SKU=pu.SKU and wk.PackageID=pu.PackageID and wk.AllocationNumber=pu.OriginBillNumber   
    ) tep  
    left join (select * from  RB_Inventory_DetailLog with(NOLOCK) where BillType=5   and OperateTime>='2022-03-28'  and  OperateTime< DATEADD(DAY,1,'2022-04-28') ) ilog
    on ilog.CustomerID=tep.CustomerID and ilog.WareHouseID=tep.WareHouseID and ilog.SKU=tep.SKU and ilog.OriginBillNumber=tep.OriginBillNumber
    left join RB_WareHouse rbwh with(NOLOCK) on tep.WareHouseID=rbwh.ID
    left join RB_WareHouse inwh with(NOLOCK) on tep.InWareHouseID=inwh.ID
    where  rbwh.WareHouseType=1   and  tep.DifferenceNum>=1 and tep.DifferenceNum<=9999999 ) AS PagerTable

    --PARAMS:@CustomerID = 1 ,@StratTime = 2022-03-28 ,@EndTime = 2022-04-28 ,@StratNum = 1 ,@EndNum = 9999999



  3. 2022-05-03 16:31:24, 由 陈少军 解决,方案为 性能问题 。
    修改了 解决方案,旧值为 "",新值为 "performance"。
    修改了 解决版本,旧值为 "",新值为 "569"。
    修改了 解决日期,旧值为 "",新值为 "2022-05-03 16:27:45"。
    修改了 指派给 ,旧值为 "chenshaojun",新值为 "qihaoran"。
    修改了 Bug状态 ,旧值为 "active",新值为 "resolved"。
    修改了 是否确认,旧值为 "0",新值为 "1"。
    修改了 解决者 ,旧值为 "",新值为 "chenshaojun"。

    1 .问题分析

         select count() 查询,将不必要的查询字段和left join 去掉

         去掉后查询从180秒 到优化后的 1秒查询出结果


    2.解决方案 参考(请分析业务逻辑,目前的原查询sql有有大量的函数统计,不必要的查询字段,left join 查询,建议去掉)


    优化后的sql 如下:

    SELECT Count(0)
    FROM   (SELECT Abs(Isnull(wk.OutPutNum, 0) - Abs(Isnull(pu.OperateNum, 0))) AS DifferenceNum
            FROM   (SELECT put.CustomerID,
                           put.WareHouseID,
                           put.OutPutNum,
                           put.SKU
                    FROM   RB_WareHouse_Product_OutPut_Log put WITH(NOLOCK)
                    WHERE  put.CustomerID = 1
                           AND put.OutTime >= '2022-03-28'
                           AND put.OutTime < Dateadd(DAY, 1, '2022-04-28')
                           AND put.WareHouseID IN ( 1100000, 2, 279, 333,
                                                    336, 687, 1185, 2205,
                                                    3216, 3584, 3922, 4316,
                                                    5312, 7056, 7057, 7085,
                                                    7556, 7590 )
                    GROUP  BY put.CustomerID,
                              put.WareHouseID,
                              put.OutPutNum,
                              put.SKU) wk
                   FULL JOIN (SELECT inv.CustomerID,
                                     inv.WareHouseID,
                                     inv.OriginBillNumber,
                                     inv.OperateNum,
                                     inv.SKU
                              FROM   RB_Inventory_DetailLog inv WITH(NOLOCK)
                              WHERE  inv.BillType = 5
                                     AND inv.CustomerID = 1
                                     AND inv.OperateTime >= '2022-03-28'
                                     AND inv.OperateTime < Dateadd(DAY, 1, '2022-04-28')
                                     AND inv.WareHouseID IN ( 1100000, 2, 279, 333,
                                                              336, 687, 1185, 2205,
                                                              3216, 3584, 3922, 4316,
                                                              5312, 7056, 7057, 7085,
                                                              7556, 7590 )
                              GROUP  BY inv.CustomerID,
                                        inv.WareHouseID,
                                        inv.OperateNum,
                                        inv.SKU,
                                        inv.OriginBillNumber) pu
                          ON wk.WareHouseID = pu.WareHouseID
                             AND wk.SKU = pu.SKU) tep
    WHERE  tep.DifferenceNum >= 1
           AND tep.DifferenceNum <= 9999999 


  4. 2022-05-03 16:32:06, 由 陈少军 指派给 qihaoran。
    修改了 抄送给,旧值为 "",新值为 ",xuruifeng"。


    参考解决方案,优化

  5. 2022-05-09 14:00:18, 由 qihaoran 添加备注。

    已验证

  6. 2022-05-09 14:00:21, 由 qihaoran 关闭。
    修改了 Bug状态 ,旧值为 "resolved",新值为 "closed"。
    修改了 指派给 ,旧值为 "qihaoran",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "qihaoran"。
    修改了 关闭日期,旧值为 "",新值为 "2022-05-09 14:00:21"。
所属项目 技术中心-需求池
所属模块 /
所属计划
所属迭代 【智汇】产品部 4月 第2 版本(2022年)
Bug类型 程序BUG
严重程度 提示
优先级 P2
Bug状态 已关闭
业务部门
影响功能
开发责任人 许瑞丰
测试责任人 qihaoran
解决时效 0
激活次数 0
激活日期
是否确认 是
当前指派 Closed 于 2022-05-09 14:00:21
截止日期 0000-00-00
上线时间
上线时效
操作系统 Windows
浏览器 全部
关键词
抄送给 许瑞丰
所属迭代 【智汇】产品部 4月 第2 版本(2022年)
相关需求
相关任务
由谁创建 qihaoran 于 2022-04-28 19:53:52
影响环境 577
由谁解决 陈少军 于 2022-05-03 16:27:45
解决版本 569
解决方案 性能问题
由谁关闭 qihaoran 于 2022-05-09 14:00:21
最后修改 qihaoran 于 2022-05-09 14:00:21
相关Bug