从华为控制台捞出的慢sql,看似想瑞丰的,若不是专给对应的同事,或我来跟进
1. 问题描述,分析
count() 查询,查询了其他不必要的字段,导致查询慢
2. 解决方案:
保留id,去掉其他不必要的查询字段,测试 查询速度从10秒到优化后的1秒
优化后的sql:
SELECT Count(1) FROM ( SELECT listing.ID
--listing.CompanyID ,
--listing.CourierNum ,
--listing.Weight ,
--listing.AddAdminID ,
--listing.AddTime ,
--listing.IsEnable ,
--company.CompanyName ,
--listing.Remark ,
--listing.Count ,
--ad.UserName ,
--listing.PartialWeight,
--procurement.P_Code,
--procurement.IsUrgent,
--single.Single_NO,
--single.AddTime AS SingleAddTime,
--WH.WareHouseName,
--listing.ImageUrl
FROM [Rb_procurement_delivery_listing] (NOLOCK) listing
LEFT JOIN Rb_procurement_expresscompany (NOLOCK) company ON company.ID = listing.CompanyID
LEFT JOIN Rb_admin (NOLOCK) ad ON ad.ID = listing.AddAdminID
LEFT JOIN Rb_procurement_detail_singlelist (NOLOCK) single ON single.Single_NO = listing.Single_NO AND single.CustomerID = listing.CustomerID
LEFT JOIN Rb_procurement_list (NOLOCK) procurement ON procurement.P_Code = single.P_Code AND procurement.CustomerID = listing.CustomerID
LEFT JOIN Rb_warehouse (NOLOCK) WH ON WH.CustomerID = procurement.CustomerID AND WH.ID = procurement.WareHouseID
WHERE (single.IsDelete = 0 OR single.IsDelete IS NULL) AND listing.CustomerID = 1 AND listing.AddTime >= '2022-04-04' AND listing.AddTime < '2022-05-05' ) AS PagerTable
--,N'@CustomerID int,@AddTimeStart nvarchar(10),@AddTimeEnd datetime',@CustomerID=1,@AddTimeStart=N'2022-04-04',@AddTimeEnd='2022-05-05 00:00:00
exec sp_executesql N'SELECT COUNT(1) FROM ( SELECT listing.ID ,
listing.CompanyID ,
listing.CourierNum ,
listing.Weight ,
listing.AddAdminID ,
listing.AddTime ,
listing.IsEnable ,
company.CompanyName ,
listing.Remark ,
listing.Count ,
ad.UserName ,
listing.PartialWeight,
procurement.P_Code,
procurement.IsUrgent,
single.Single_NO,
single.AddTime as SingleAddTime,
WH.WareHouseName,
listing.ImageUrl
FROM [RB_Procurement_Delivery_Listing] (NOLOCK) listing
LEFT JOIN RB_Procurement_ExpressCompany (NOLOCK) company ON company.ID = listing.CompanyID
LEFT JOIN RB_Admin (NOLOCK) ad ON ad.ID = listing.AddAdminID
LEFT JOIN RB_Procurement_Detail_SingleList (NOLOCK) single on single.Single_NO = listing.Single_NO AND single.CustomerID = listing.CustomerID
LEFT JOIN RB_Procurement_List (NOLOCK) procurement ON procurement.P_Code = single.P_Code AND procurement.CustomerID = listing.CustomerID
LEFT JOIN RB_WareHouse (NOLOCK) WH ON WH.CustomerID = procurement.CustomerID AND WH.ID = procurement.WareHouseID
WHERE (single.IsDelete = 0 OR single.IsDelete IS NULL) AND listing.CustomerID = @CustomerID AND listing.AddTime >= @AddTimeStart AND listing.AddTime < @AddTimeEnd ) AS PagerTable',N'@CustomerID int,@AddTimeStart nvarchar(10),@AddTimeEnd datetime',@CustomerID=1,@AddTimeStart=N'2022-04-04',@AddTimeEnd='2022-05-05 00:00:00'
