缺少非聚集索引影响

Missing Non Clustered Index Impact

我从 SQL 表中找到了几个缺失的非聚集索引。我只想知道如果我实施我发现的缺失的非聚集索引会产生什么影响。

谢谢

你可以看到在执行计划中,在SSMS上找到这个按钮:

现在将查询粘贴到 SSMS 中并按 F5,查询将被执行。现在进入“执行计划”选项卡:

例如这个查询有很大的影响:

(有时 SSMS 会建议您如何改进查询,有时不会;不要期望一直看到这个绿色短语。)

现在,从这里告诉你,通过添加该索引,查询将 99.6192 更快是一个不可能的事情。

SQL Serve 建议您添加该索引可能会有很大帮助。

最好的方法是:

  1. 备份数据库
  2. 创建测试环境
  3. 添加索引
  4. 现在测试同一个查询是否运行更快

请记住,如果您使用的是 SQL Server 2016 或更高版本,您可以使用 Query Store,这与执行计划等效,但功能更强大。

如果您想了解更多信息,请使用 sp_BlitzIndex 并熟悉它。

使用 Database Health Monitor, IDERA SQL Check, isitsql 这是免费工具,可以帮助您截取有关查询图形视图的屏幕截图。

基本上你必须向你的经理证明你所做的改变已经改善了绩效。

编辑:

我觉得你的问题很中肯,我也会给你一个来自Pinal Dave的查询,让你对缺失的索引产生影响:

-- Missing Index Script
-- Original Author: Pinal Dave 
SELECT TOP 25
dm_mid.database_id AS DatabaseID,
dm_migs.avg_user_impact*(dm_migs.user_seeks+dm_migs.user_scans) Avg_Estimated_Impact,
dm_migs.last_user_seek AS Last_User_Seek,
OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) AS [TableName],
'CREATE INDEX [IX_' + OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) + '_'
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.equality_columns,''),', ','_'),'[',''),']','') 
+ CASE
WHEN dm_mid.equality_columns IS NOT NULL
AND dm_mid.inequality_columns IS NOT NULL THEN '_'
ELSE ''
END
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.inequality_columns,''),', ','_'),'[',''),']','')
+ ']'
+ ' ON ' + dm_mid.statement
+ ' (' + ISNULL (dm_mid.equality_columns,'')
+ CASE WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns 
IS NOT NULL THEN ',' ELSE
'' END
+ ISNULL (dm_mid.inequality_columns, '')
+ ')'
+ ISNULL (' INCLUDE (' + dm_mid.included_columns + ')', '') AS Create_Statement
FROM sys.dm_db_missing_index_groups dm_mig
INNER JOIN sys.dm_db_missing_index_group_stats dm_migs
ON dm_migs.group_handle = dm_mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details dm_mid
ON dm_mig.index_handle = dm_mid.index_handle
WHERE dm_mid.database_ID = DB_ID()
ORDER BY Avg_Estimated_Impact DESC
GO

Avg_Estimated_Impact的计算公式为:

(Number of times the table was queried) * (Seeks + Scans) 

所以不要指望这个值在 0 到 100 之间。不在一个范围内。

总的来说,我认为以这种方式计算因子是一个天才的想法,最终你的问题是相关的。

我知道你是新手,请下次post一些代码。