缺少非聚集索引影响

问题描述

我从sql表中发现了一些丢失的非聚簇索引。我只想知道如果实施我发现的缺失的非聚簇索引会带来的影响。

谢谢

解决方法

您可以看到在执行计划中,在SSMS上找到此按钮:

enter image description here

现在将查询粘贴到SSMS中,然后按F5,将执行查询。现在进入执行计划标签:

enter image description here

例如,此查询的影响很大:

enter image description here

有时SSMS建议您如何改进查询,有时没有;不要期望一直看到此绿色短语。

现在,从这里告诉您,通过添加该索引,查询将99.6192更快是一个长远的尝试。

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

最好的方法是:

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

请记住,如果您使用的是SQL Server 2016或更高版本,则可以使用Query Store,它等效于执行计划,但适用于类固醇。

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

使用Database Health MonitorIDERA SQL Checkisitsql这两个免费工具,它们将帮助您获取有关查询的图形视图的屏幕截图。

基本上,您必须向经理证明所做的更改可以改善绩效。

编辑:

我认为您的问题非常相关,在此我还将向您提供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之间。不在刻度上。

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

我知道您是新手,请下次发布一些代码。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...