我正在设置一些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])
答案 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])
然后再次运行原始查询。