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';
参考解决方案 优化,这里记录验证效果,后面进一步优化