1. 问题描述,分析
count 查询里,查询了不必要的字段,导致查询慢
2. 解决方案
去掉不必要的字段查询,提高查询速度,保留 R.CustomerID,其他字段去掉
优化后的sql:
SELECT Count(*)
FROM (SELECT R.CustomerID
--O.OrderSourceType,
--R.OrderSourceID,
--R.OrderSourceSKU,
--R.SKU,
--R.SalesDay,
--Sum(R.SalesNum) AS TotalSalesNum
FROM RB_Report_OrderSourceSKUDay R (nolock)
INNER JOIN RB_OrderSource O (nolock)
ON R.OrderSourceID = O.ID
AND R.CustomerID = O.CustomerID
WHERE R.CustomerID = 1
AND R.SalesDay >= '2022-04-24 00:00:00'
AND R.SalesDay < '2022-05-05 00:00:00'
GROUP BY R.CustomerID,
O.OrderSourceType,
R.OrderSourceID,
R.OrderSourceSKU,
R.SKU,
R.SalesDay) T
--',N'@p1 bigint,@p2 datetimeoffset(7),@p3 datetimeoffset(7)',@p1=1,@p2='2022-04-24 00:00:00 +08:00',@p3='2022-05-05 00:00:00 +08:00'
--558685
exec sp_executesql N'SELECT COUNT(*) FROM (
SELECT R.CustomerID,O.OrderSourceType,R.OrderSourceID,R.OrderSourceSKU,R.SKU,R.SalesDay,SUM(R.SalesNum) as TotalSalesNum
FROM RB_Report_OrderSourceSKUDay R (nolock)
INNER JOIN RB_OrderSource O (nolock) ON R.OrderSourceID = O.ID AND R.CustomerID = O.CustomerID
WHERE R.CustomerID=@p1 AND R.SalesDay>=@p2 AND R.SalesDay<@p3
GROUP BY R.CustomerID,O.OrderSourceType,R.OrderSourceID,R.OrderSourceSKU,R.SKU,R.SalesDay
) T',N'@p1 bigint,@p2 datetimeoffset(7),@p3 datetimeoffset(7)',@p1=1,@p2='2022-04-24 00:00:00 +08:00',@p3='2022-05-05 00:00:00 +08:00'