问题描述
我从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之间。不在刻度上。
总的来说,我认为这是个天才的想法,可以以此方式计算因子,最终您的问题是相关的。
我知道您是新手,请下次发布一些代码。