【问题标题】:Query running slow and missing indexes查询运行缓慢且缺少索引
【发布时间】:2020-04-06 18:18:57
【问题描述】:

我正在设置一些 SQL 视图以用作 Power BI 数据源。但是,其中一个查询经常需要很长时间才能运行,我想弄清楚解决这个问题的最佳方法是什么。我在雇主的财务部门工作,所以 SQL 查询调优并不是我每天都在做的事情,但我正在努力学习。

执行计划在这里:

https://www.brentozar.com/pastetheplan/?id=BJGHe1W0H

我可以看到执行计划要求我添加一些索引,但我不确定是否应该这样做。我已经读过不要盲目地遵循 SQL 提示,因为它可能会导致其他问题

查询是:

select ansapbicalls.*
from ansapbicalls
inner join 
ANSAPBIStatus
on ansapbicalls.[Call Status]=ansapbistatus.[Status ID]
inner join ansapbifault on ansapbicalls.Fault=ANSAPBIFault.[Fault ID]
where ANSAPBIStatus.[Status Type]='Operations' and ANSAPBIFault.[Job Type]='RR'

而缺少索引的警告是:

Missing Index (Impact 39.0531): 
    CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] 
    ON [dbo].[MXMSERVCALLAUDIT] ([TYPE],[DATAAREAID]) INCLUDE ([JOBID],[RECID])

Missing Index (Impact 51.6627): 
    CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] 
    ON [dbo].[MXMSERVCALLAUDIT] ([DATAAREAID],[RECID]) INCLUDE ([JOBID],[USERID],[DATE])

【问题讨论】:

  • 您没有发布实际的表格(甚至是查询)。执行计划提到了任何地方都没有包含的表和列,因此无法知道是否需要它们。

标签: sql sql-server performance sql-server-2012


【解决方案1】:

根据我的经验,最好尝试应用索引。

通过复制代码创建索引并命名索引,通常类似于 IX_Tablename_columnames。

创建索引需要一些时间,但之后运行查询应该会快很多。如果不是这种情况(我对此表示怀疑),您可以随时再次删除索引。

所以运行这段代码

CREATE NONCLUSTERED INDEX [IX_MXMSERVCALLAUDIT_TYPE_DATAAREAID_JOBID_RECID] 
ON [dbo].[MXMSERVCALLAUDIT] ([TYPE],[DATAAREAID]) INCLUDE ([JOBID],[RECID])

CREATE NONCLUSTERED INDEX [IX_MXMSERVCALLAUDIT_DATAAREAID_RECID_JOBID_USERID_DATE] 
ON [dbo].[MXMSERVCALLAUDIT] ([DATAAREAID],[RECID]) INCLUDE ([JOBID],[USERID],[DATE])

然后再次运行原始查询。

【讨论】:

  • 这样运行原始查询的时间减少了一半,这要好得多!干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2011-01-22
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多