查询运行缓慢且缺少索引

时间:2019-12-13 10:02:16

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

我正在设置一些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])

1 个答案:

答案 0 :(得分:2)

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

通过复制代码创建索引并命名索引,通常类似于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])

然后再次运行原始查询。