1.问题描述
大表多列联表查询超时
2.问题分析
大表,多列联查,部分字段没有使用到索引,回主表查询导致整个查询慢
3.解决方案 (此类问题已解决,记录到这里做记录,类似问题可以参考这样处理)
3.1 根据查询的列来自不同的表,注释排除,看看慢的原因是查询那个表的字段;
3.2 定位到查询慢的表后,查看执行计划,分析此表的执行计划是否有用的索引,用的那个索引,索引是否包含要查询的字段,若没有可以添加包含字段;
33 如此一 一检查每个表查询慢的字段,到最终解决查询慢的原因。
4.超时sql
SELECT *
FROM (SELECT Row_number()
OVER (
ORDER BY ID DESC ) AS [PageIndex],
*
FROM (SELECT p.ID,
p.CustomerID,
p.ClientSKU,
p.SKU,
p.ProductState,
p.MinSaleNum,
p.ImageUrl,
p.ProductProperty,
p.WithBattery,
p.PlugRelate,
p.PlugRelateType,
p.ProductGroupSKU,
p.ProductName,
p.ProductNameCN,
p.LastSupplierPrice,
p.GrossWeight,
p.UnitShipFee,
p.LastBuyShipFee,
p.SalePrice,
p.PackWeight,
p.IsGroup,
p.OnlineStatus,
p.ComeSource AS ComeSource,
Isnull(whp.GoodNum, 0) GoodNum,
Isnull(whp.AvgDailySales, 0) AvgDailySales,
Isnull(wh.WareHouseName, '') DefaultLocalWarehouseName,
pa.RecommendValue,
pa.AddAdminID,
pa.AddAdminName,
pa.AddTime,
pa.DevelopmentAuditOperatorName,
pa.ProductDevelopmentAuditTime,
pa.EditAuditOperatorName,
pa.ProductEditAuditTime,
pa.PictureAuditOperatorName,
pa.ProductPictureAuditTime,
pa.IsAmazonSale,
pa.NoSalePlatform,
pa.NoSaleCountry,
pa.DevelopStatus,
pa.DevelopAdminID,
pa.DevelopAdminName,
pa.DevelopTime,
pa.DevelopRefuseReason,
pa.DevelopRefuseTime,
pa.AssignDevelopAdminID,
pa.AssignDevelopAdminName,
pa.AssignDevelopTime,
pa.EditStatus,
pa.EditAdminID,
pa.EditAdminName,
pa.EditTime,
pa.EditRefuseTime,
pa.ToImageMemo,
pa.ImageStatus,
pa.ImageAdminID,
pa.ImageAdminName,
pa.ImageTime,
pa.ImageRefuseTime,
pa.BuyerID,
pa.BuyerName,
pa.BuyerSetTime,
pa.CheckStatus,
pa.CheckReason,
pa.CheckAdminID,
pa.CheckAdminName,
pa.CheckTime,
pa.OnlineTime,
pa.OfflineTime,
pa.OfflineAdminID,
pa.OfflineAdminName,
p.TaxPoint,
p.TaxRate,
p.IsRawMaterial,
Isnull(ProductBadNum, 0) ProductBadNum,
Isnull(NumError, 0) NumError,
p.ProductType,
Isnull(p.IsFBABarCode, 0) IsFBABarCode,
Isnull(p.IsRecommendOcean, 0) AS IsRecommendOcean,
pd.DeclarationPriceRate,
p.IsCheckDeclarationCode,
p.IsCheckTransport,
p.LastBuyPrice,
pa.PriceSpecialistOperatTime,
Isnull(p.DefaultLocalWarehouse, 0) AS DefaultLocalWareHouse,
p.DevelopType,
p.AppointDevelopType,
p.PictureSource,
p.PreclassStatus,
p.PreclassGoodsCode,
p.ImitatingBrandRemark,
p.ProductStateRemarks,
p.ClassID1,
p.ClassID2,
p.ClassID,
p.BeginTime,
p.EndTime,
p.ProdutcArrivalDate,
Isnull(pa.PhotographerId, 0) PhotographerId,
Isnull(pa.PhotographerName, '') PhotographerName,
pa.PhotographerTime,
pa.WrapDesignerId,
pa.WrapDesignerName,
pa.WrapDesignerTime,
pa.ImageDesignerId,
pa.ImageDesignerName,
pa.ImageDesignerTime,
pa.IntellectualPropertyRightsAdminID,
pa.IntellectualPropertyRightsAdminName,
pa.IntellectualPropertyRightsTime,
Isnull(p.EditNum, 0) EditNum,
p.IsNeedCeCertification
FROM dbo.RB_Product (NOLOCK) p
LEFT JOIN RB_Product_Admin pa WITH ( NOLOCK )
ON pa.SKU = p.SKU
AND pa.CustomerID = p.CustomerID
LEFT JOIN RB_WareHouse_Product whp WITH ( NOLOCK )
ON whp.SKU = p.SKU
AND whp.CustomerID = p.CustomerID
AND whp.WareHouseID = ( CASE p.DefaultLocalWarehouse WHEN 0 THEN 5312 WHEN NULL THEN 5312 ELSE p.DefaultLocalWarehouse END )
AND EXISTS (SELECT 1 FROM RB_WareHouse
WHERE whp.WareHouseID = RB_WareHouse.ID AND whp.CustomerID = RB_WareHouse.CustomerID AND RB_WareHouse.WareHouseType = 1)
LEFT JOIN RB_WareHouse wh (NOLOCK) ON p.CustomerID = wh.CustomerID AND p.DefaultLocalWarehouse = wh.ID AND wh.IsActive = 1
LEFT JOIN (SELECT CustomerID,SKU, Sum(BadNum) AS ProductBadNum FROM RB_Procurement_Detail_BadList WITH ( NOLOCK ) WHERE BadNum > 0
AND DType = 1 GROUP BY CustomerID, SKU)
AS RB_Procurement_Detail_BadList ON p.SKU = RB_Procurement_Detail_BadList.SKU AND p.CustomerID = RB_Procurement_Detail_BadList.CustomerID
LEFT JOIN (SELECT CustomerID, SKU, Sum(NumError) AS NumError FROM RB_ProductManageLog WITH ( NOLOCK ) WHERE NumError > 0
GROUP BY CustomerID, SKU)
AS RB_ProductManageLog ON p.SKU = RB_ProductManageLog.SKU AND p.CustomerID = RB_ProductManageLog.CustomerID
LEFT JOIN RB_Product_Declaration pd ( NOLOCK ) ON p.CustomerID = pd.CustomerID AND p.SKU = pd.SKU WHERE p.CustomerID = 1 AND p.DeleteStatus = 0
AND p.ProductState IN ( 0, 1, 3, 4, 5 ) AND pa.DevelopStatus = 3 AND pa.EditStatus = 3 AND pa.ImageStatus = 3 AND pa.CheckStatus = 0
AND p.ProductProperty = 1 AND Isnull(p.BrandID, 0) = 0) AS TempTable)
AS PagerTable WHERE PagerTable.[PageIndex] BETWEEN 1 AND 500