任务描述

从华为控制台捞出的慢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


3. 华为DB捞出的慢sql:

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'

历史记录  
  1. 2022-05-04 13:54:11, 由 陈少军 创建。
  2. 2022-05-04 13:54:27, 由 陈少军 指派给 许瑞丰。
    修改了 预计剩余,旧值为 "0",新值为 "2"。
    参考解决方案修改
  3. 2022-05-06 09:56:23, 由 许瑞丰 指派给 陈少军。
    修改了 指派给,旧值为 "xuruifeng",新值为 "chenshaojun"。
    PurchaseIndex    采购收货管理的功能
  4. 2022-05-07 17:03:20, 由 陈少军 指派给 程伟。
    修改了 指派给,旧值为 "chenshaojun",新值为 "chengwei"。


    根据沟通,看看这个优化是你的吗?若是的,参考解决方案修改 tks

  5. 2022-05-25 16:36:08, 由 程伟 指派给 程伟。

    6月1号 完成

    在分页查询里面取消的查询字段,如果页面必须要显示出来,则可以再写一个查询。使用分页查询出来的主键ID,去查询那些分页查询里面取消的字段,根据主键ID去查询的话,速度应该很快的

  6. 2022-06-01 10:56:38, 由 程伟 指派给 唐飞飞。
    修改了 指派给,旧值为 "chengwei",新值为 "tangfeifei"。
  7. 2022-06-01 12:02:16, 由 唐飞飞 完成。
    修改了 指派给 ,旧值为 "tangfeifei",新值为 "chenshaojun"。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2022-06-01 12:00:16"。
    修改了 总计消耗,旧值为 "0",新值为 "1"。
    修改了 预计剩余,旧值为 "2",新值为 "0"。
    修改了 任务状态,旧值为 "wait",新值为 "done"。
    修改了 由谁完成,旧值为 "",新值为 "tangfeifei"。
    修改了 实际完成,旧值为 "",新值为 "2022-06-01 12:02:16"。

    优化后的统计查询sql:

    SELECT Count(1)
    FROM   RB_Procurement_Delivery_Listing listing WITH ( NOLOCK )
           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 




  8. 2022-07-16 17:09:17, 由 zhengqiao 关闭。
    修改了 任务状态,旧值为 "done",新值为 "closed"。
    修改了 指派给 ,旧值为 "chenshaojun",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "zhengqiao"。
    修改了 关闭时间,旧值为 "0000-00-00 00:00:00",新值为 "2022-07-16 17:09:17"。
    修改了 关闭原因,旧值为 "",新值为 "done"。
所属迭代 系统管理部 - 系统服务优化
所属模块 /
相关需求 暂无
指派给 Closed 于 2022-07-16 17:09:17
任务类型 后端
任务标签 初始
开发组
任务状态 已关闭
进度 100%
优先级 P2
关键词
抄送给 刘灿 黄金龙 胡晓龙
由谁创建 陈少军 于 2022-05-04 13:54:11
由谁完成 唐飞飞 于 2022-06-01 12:02:16
由谁取消 暂无
由谁关闭 zhengqiao 于 2022-07-16 17:09:17
关闭原因 已完成
最后编辑 zhengqiao 于 2022-07-16 17:09:17
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 0工时
总计消耗 1工时
预计剩余 0工时
预计开始 2022-05-04
实际开始 2022-06-01
截止日期 2022-05-11