缺少非聚集索引影响
Missing Non Clustered Index Impact
我从 SQL 表中找到了几个缺失的非聚集索引。我只想知道如果我实施我发现的缺失的非聚集索引会产生什么影响。
谢谢
你可以看到在执行计划中,在SSMS上找到这个按钮:
现在将查询粘贴到 SSMS 中并按 F5,查询将被执行。现在进入“执行计划”选项卡:
例如这个查询有很大的影响:
(有时 SSMS 会建议您如何改进查询,有时不会;不要期望一直看到这个绿色短语。)
现在,从这里告诉你,通过添加该索引,查询将 99.6192
更快是一个不可能的事情。
SQL Serve 建议您添加该索引可能会有很大帮助。
最好的方法是:
- 备份数据库
- 创建测试环境
- 添加索引
- 现在测试同一个查询是否运行更快
请记住,如果您使用的是 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一些代码。
我从 SQL 表中找到了几个缺失的非聚集索引。我只想知道如果我实施我发现的缺失的非聚集索引会产生什么影响。
谢谢
你可以看到在执行计划中,在SSMS上找到这个按钮:
现在将查询粘贴到 SSMS 中并按 F5,查询将被执行。现在进入“执行计划”选项卡:
例如这个查询有很大的影响:
(有时 SSMS 会建议您如何改进查询,有时不会;不要期望一直看到这个绿色短语。)
现在,从这里告诉你,通过添加该索引,查询将 99.6192
更快是一个不可能的事情。
SQL Serve 建议您添加该索引可能会有很大帮助。
最好的方法是:
- 备份数据库
- 创建测试环境
- 添加索引
- 现在测试同一个查询是否运行更快
请记住,如果您使用的是 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一些代码。