1. count(0) 查询 问题分析
count() 查询,去掉不必要的 left join 查询,测试查询速度从54秒到优化后的7秒
2. 解决方案
去掉不必要的 left join 查询,测试查询速度从54秒到优化后的7秒
注意:left join 会产生重复的id数据,业务上确认一下,查询的业务是否需要查询出重复的数据
3. 优化后的sql
SELECT count(0)
FROM RB_AmazonUploadResult temp0 WITH(nolock)
--LEFT JOIN RB_OrderSource WITH(nolock)
-- ON temp0.OrderSourceID = RB_OrderSource.ID
-- AND temp0.CustomerID = RB_OrderSource.CustomerID
--LEFT JOIN RB_Product WITH(nolock)
-- ON RB_Product.SKU = temp0.SKU
-- AND RB_Product.CustomerID = temp0.CustomerID
--LEFT JOIN RB_Amazon_Product_Base pb (nolock)
-- ON pb.CustomerID = temp0.CustomerID
-- AND pb.OrderSourceID = temp0.OrderSourceID
-- AND pb.OrderSourceSKU = temp0.OrderSourceSKU
-- AND pb.IsDelete = 0
--LEFT JOIN RB_Product_OrderSourceSKU os (nolock)
-- ON os.CustomerID = temp0.CustomerID
-- AND os.OrderSourceID = temp0.OrderSourceID
-- AND os.OrderSourceSKU = temp0.OrderSourceSKU
--LEFT JOIN RB_OrderSource ros (nolock)
-- ON ros.CustomerID = os.CustomerID
-- AND ros.ID = os.OrderSourceID
--LEFT JOIN RB_AmazonUploadProduct up (nolock)
-- ON up.CustomerID = temp0.CustomerID
-- AND up.ProductDataID = temp0.ID
-- AND up.OrderSourceSKU = temp0.OrderSourceSKU
-- AND up.ProductDataID > 0
LEFT JOIN (SELECT Min(ID) AS id
FROM RB_AmazonUploadResult WITH(nolock)
WHERE AddTime > '2022-02-01'
AND AddTime < '2022-03-29'
AND CustomerID = 1
AND LoadType < 8
GROUP BY VarGuid,
OrderSourceSKU)tempmin
ON tempmin.id = temp0.id
WHERE temp0.AddTime > '2022-02-01'
AND ( temp0.AddTime < '2022-03-29' )
AND ( temp0.CustomerID = 1 )
AND ( tempmin.id IS NOT NULL )
AND ( temp0.LoadType < 8 )
--54秒 2060421 left join 会产生重复的id数据,业务上确认一下,查询的业务是否需要查询出重复的数据
--7 2055940