任务描述

1. 问题分析

   鞠智明新功能 ERP慢sql 优化,需2分钟查询出结果;

  分析执行sql 发现,慢的主要原因是:Sum 的字段查询;去掉sum的字段查询2秒查出结果


2.解决方案:参考

   1.去掉sum函数计算,将查询出的结果集到应用程序里计算sum;

   2.添加了索引查询sum计算所需的字段;

   3.关联的表能用小表查询到同样字段的用小表关联,减少查询的数据;

   4.优化后查询从2分钟到20秒查询出83万数据;


3.sql

SELECT DATEPART(YEAR, arod.AddTime) StatisticsYear,
       MONTH(arod.AddTime) StatisticsMonth,
       arod.OrderType,
   arod.DisposedQuantity, 
   arod.ShippedQuantity,
   po.LastBuyPrice, 
   po.LastSupplierPrice
       --ISNULL(DisposedQuantity, 0),
       --ISNULL(ShippedQuantity, 0),
       --ISNULL(   (CASE
       --               WHEN po.LastBuyPrice > 0 THEN
       --                   po.LastBuyPrice
       --               ELSE
       --                   po.LastSupplierPrice
       --           END
       --          ),
       --          0
       --      ) TotalBuyPrice
FROM RB_Amazon_Removal_Order_Detail (NOLOCK) arod  --with(index(IX_RB_Amazon_Removal_Order_Detail_AddTime_OrderType_Dis))  
    LEFT JOIN dbo.RB_OrderSource (NOLOCK) os
        ON os.CustomerID = arod.CustomerID
           AND os.ID = arod.OrderSourceID
    LEFT JOIN RB_Amazon_RemovalOrder aro (NOLOCK)
        ON aro.CustomerID = arod.CustomerID
           AND aro.ToOrderSourceID = arod.OrderSourceID
           AND aro.MerchantRemovalOrderID = arod.OrderID
           AND aro.Staus IN ( 1, 5, 8 )
    LEFT JOIN RB_Amazon_Product_Base po (NOLOCK)
        ON po.CustomerID = arod.CustomerID
           AND po.OrderSourceID = arod.OrderSourceID
           AND po.OrderSourceSKU = arod.SKU
           AND po.IsDelete = 0
WHERE arod.CustomerID = 1
      AND os.OrderSourceType = 1
      AND os.IsActive = 1
      AND arod.AddTime >= '2021-05-17'
      AND arod.AddTime <= '2022-06-17';

历史记录  
  1. 2022-06-20 16:08:49, 由 陈少军 创建。
  2. 2022-06-20 16:14:37, 由 陈少军 指派给 鞠智明。
    修改了 预计剩余,旧值为 "0",新值为 "2"。

    参考解决方案 优化,这里记录验证效果,后面进一步优化

  3. 2022-06-21 15:39:18, 由 鞠智明 启动。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2022-06-21 15:39:13"。
    修改了 任务状态,旧值为 "wait",新值为 "doing"。
  4. 2022-06-21 15:42:47, 由 鞠智明 完成。
    修改了 总计消耗,旧值为 "0",新值为 "5"。
    修改了 实际完成,旧值为 "",新值为 "2022-06-21 15:39:20"。
    修改了 任务状态,旧值为 "doing",新值为 "done"。
    修改了 预计剩余,旧值为 "2",新值为 "0"。
    修改了 由谁完成,旧值为 "",新值为 "juzhiming"。

    开发报告

    1.根据架构师的方案,把sql查询中需要计算的全部拿掉,查询出所有需要的字段在内存中去处理

    SELECT 
                                        DATEPART(YEAR, arod.AddTime) StatisticsYear,
                                        MONTH(arod.AddTime) StatisticsMonth,
                                        arod.OrderType,
                                        arod.OrderSourceID,
                                        arod.OrderID AS RemovalOrderCode,
                                        arod.SKU AS OrderSourceSKU,
                                        arod.DisposedQuantity,
                                        arod.ShippedQuantity,
                                        p.LastBuyPrice,
                                        p.LastSupplierPrice
                                    FROM RB_Amazon_Removal_Order_Detail arod (NOLOCK)
                                        {1}
                                        LEFT JOIN RB_Amazon_RemovalOrder aro (NOLOCK)
                                            ON aro.CustomerID = arod.CustomerID
                                               AND aro.ToOrderSourceID = arod.OrderSourceID
                                               AND aro.MerchantRemovalOrderID = arod.OrderID
                                               AND aro.Staus IN ( {0} )
                                        LEFT JOIN RB_Product_OrderSourceSKU (NOLOCK) pos
                                            ON pos.CustomerID = arod.CustomerID
                                               AND pos.OrderSourceID = arod.OrderSourceID
                                               AND pos.OrderSourceSKU = arod.SKU
                                        LEFT JOIN dbo.RB_Product p (NOLOCK)
                                            ON pos.CustomerID = p.CustomerID
                                               AND pos.SKU = p.SKU
                                    WHERE arod.CustomerID = @CustomerID
                                          {2}
                                          AND arod.AddTime >= @StartTime
                                          AND arod.AddTime <= @EndTime

  5. 2022-06-21 15:42:51, 由 鞠智明 关闭。
    修改了 任务状态,旧值为 "done",新值为 "closed"。
    修改了 指派给 ,旧值为 "juzhiming",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "juzhiming"。
    修改了 关闭时间,旧值为 "0000-00-00 00:00:00",新值为 "2022-06-21 15:42:51"。
    修改了 关闭原因,旧值为 "",新值为 "done"。
所属迭代 系统管理部 - 系统服务优化
所属模块 /
相关需求 暂无
指派给 Closed 于 2022-06-21 15:42:51
任务类型 后端
任务标签 初始
开发组
任务状态 已关闭
进度 100%
优先级 P2
关键词
抄送给
由谁创建 陈少军 于 2022-06-20 16:08:49
由谁完成 鞠智明 于 2022-06-21 15:39:20
由谁取消 暂无
由谁关闭 鞠智明 于 2022-06-21 15:42:51
关闭原因 已完成
最后编辑 鞠智明 于 2022-06-21 15:42:51
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 0工时
总计消耗 5工时
预计剩余 0工时
预计开始 2022-06-20
实际开始 2022-06-21
截止日期 2022-06-27