查询 运行 个缓慢且缺失的索引

Query running slow and missing indexes

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

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

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

然后再次运行原始查询。