未使用的索引会导致sql server出现性能问题吗?我应该删除它们吗?

Jes*_*sse 1 sql-server sql-server-2005

我花了一些时间研究这个并且根本找不到明确的答案.这是我用来查找未使用的索引的查询:

SELECT object_name(i.object_id) as tableName, i.name as indexName
FROM sys.indexes i
LEFT JOIN sys.dm_db_index_usage_stats s ON i.object_id = s.object_id AND i.index_id = s.index_id AND s.database_id = db_id()
WHERE objectproperty(i.object_id,'IsUserTable') = 1 and i.index_id> 0
AND s.object_id IS NULL
AND i.is_Primary_Key = 0
AND i.is_unique_constraint = 0
AND i.is_unique = 0
Run Code Online (Sandbox Code Playgroud)

我的理解是,自上次重新启动sql server以来,查询优化器尚未使用此查询返回的索引.我相信我应该删除它们......我只是不完全了解是否存在性能影响或损害它们.

Joe*_*lli 7

留下它们的危害在于使用的空间和增加的工作INSERT,UPDATE以及DELETE保持索引更新的语句以及基表.


Aar*_*and 5

将它们留在那里会产生性能影响; 为每个插入,更新或删除表维护索引.

另一方面,您怎么知道索引没有被使用?DMV很棒,但它只涵盖自上次重启SQL Server以来的时间.因此,如果DMV没有完整商业周期的数据,您可能会在下次运行时杀死首席执行官的年度报告.

在我的拙见中:永远不会,仅仅根据使用DMV中的信息删除索引.