任务描述


1. 问题描述,分析

  在sql management studio 执行此sql 需2分钟,优化器提示需建索引


SQLQuery65.sql - erpdb.zhcxkj.com,1433.irobotbox (irobotboxuser (1629)) 中缺少索引的详细信息
查询处理器估计采用以下索引可以将查询开销减少 65.5746%。
*/

/*
USE [tempdb]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[#temp_events________________________________________________________________________________________________________0000000EC146] ([ClientOrderCode])

GO
*/
CREATE NONCLUSTERED INDEX [IX_RB_Amazon_ListFinancialEvents_CustomerID_FinancialEventType_AmazonOrderId_PostedDate]
ON dbo.RB_Amazon_ListFinancialEvents (CustomerID, FinancialEventType, AmazonOrderId, PostedDate)
INCLUDE (OrderSourceID)


2.解决方案建议:

2.1根据提示:创建索引后 28秒执行完成。 


2.2 此类问题建议开发的同事,对自己写的sql 查询效率做到心中有数,执行效果不好,要根据SQL优化器提示,让DBA帮助创建索引,拿不定主意的请DBA给出建议,到达比较好的效果后在上线。


3. 原查询SQL


IF EXISTS (SELECT *
           FROM   tempdb.dbo.sysobjects
           WHERE  id = Object_id(N'tempdb..#temp_orderinfo')
                  AND type = 'U')
  BEGIN
      DROP TABLE #temp_orderinfo
  END

IF EXISTS (SELECT *
           FROM   tempdb.dbo.sysobjects
           WHERE  id = Object_id(N'tempdb..#temp_events')
                  AND type = 'U')
  BEGIN
      DROP TABLE #temp_events
  END

SELECT A.ClientOrderCode,
       A.OrderSourceID
INTO   #temp_orderinfo
FROM   RB_OrderInfo A(NOLOCK)
       INNER JOIN dbo.RB_OrderSource B(NOLOCK)
               ON A.OrderSourceID = B.ID
WHERE  A.CustomerID = 1
       AND A.IsStockOrder = 0
       AND A.IsFBAOrder = 1
       AND A.ShipTime >='2022/4/6 0:00:00'
       AND A.ShipTime <= '2022/5/6 0:00:00'
       AND B.OrderSourceType = 1
       AND A.PromotionType LIKE '%MarketplaceFacilitator%'
GROUP  BY A.ClientOrderCode,
          A.OrderSourceID

SELECT B.AmazonOrderId AS ClientOrderCode
INTO   #temp_events
FROM   #temp_orderinfo A
       INNER JOIN dbo.RB_Amazon_ListFinancialEvents B(NOLOCK)
               ON A.ClientOrderCode = B.AmazonOrderId
                  AND A.OrderSourceID = B.OrderSourceID
WHERE  B.CustomerID = 1
       AND B.PostedDate >= '2022/4/6 0:00:00'
       AND Isnull(B.AmazonOrderId, '') <> ''
       AND B.FinancialEventType = 'ShipmentEvents'
GROUP  BY B.AmazonOrderId

SELECT Count(DISTINCT ClientOrderCode)
FROM   #temp_orderinfo

SELECT Count(DISTINCT ClientOrderCode)
FROM   #temp_events

SELECT TOP 10 A.ClientOrderCode
FROM   #temp_orderinfo A
       LEFT JOIN #temp_events B
              ON A.ClientOrderCode = B.ClientOrderCode
WHERE  B.ClientOrderCode IS NULL


历史记录  
  1. 2022-05-12 09:42:33, 由 陈少军 创建。
  2. 2022-05-12 09:43:09, 由 陈少军 指派给 陈少军。
    修改了 预计剩余,旧值为 "0",新值为 "1"。
    已创建索引完成,此类问题希望开发的同事参考解决方案执行,此处做为一个案例列出说明
  3. 2022-05-12 09:43:56, 由 陈少军 完成。
    修改了 总计消耗,旧值为 "0",新值为 "1"。
    修改了 实际完成,旧值为 "",新值为 "2022-05-12 09:43:13"。
    修改了 任务状态,旧值为 "wait",新值为 "done"。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2022-05-12 09:43:56"。
    修改了 预计剩余,旧值为 "1",新值为 "0"。
    修改了 由谁完成,旧值为 "",新值为 "chenshaojun"。
    已创建索引完成,执行时间有优化前2分钟到28秒查询完成
  4. 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-12 09:42:33
由谁完成 陈少军 于 2022-05-12 09:43:13
由谁取消 暂无
由谁关闭 zhengqiao 于 2022-07-16 17:09:17
关闭原因 已完成
最后编辑 zhengqiao 于 2022-07-16 17:09:17
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 0工时
总计消耗 1工时
预计剩余 0工时
预计开始 2022-05-12
实际开始 2022-05-12
截止日期 2022-05-12