我正在清理一个包含大量索引的数据库 (SQL Server 2012)。我相信,有些可以删除或合并。
例如,我有 index1 :
CREATE NONCLUSTERED INDEX [index1] ON [dbo].[MyTable]
(
[Project] ASC
)
INCLUDE (a_bunch_of _columns)
和index2:
CREATE NONCLUSTERED INDEX [index2] ON [dbo].[MyTable]
(
[Project] ASC,
[Type] ASC
)
INCLUDE (a_bunch_of _columns)
我在数据库统计中看到 index1 比 index2 使用得更多,但我相信可以找到 index1 中的所有信息进入 index2。因此,如果删除 index1,数据库引擎将搜索 index2 而不是 index1 现在的做法。性能应该和现在一样好。 (甚至更好一点,因为要维护的索引会少一个)
这是正确的还是我遗漏了什么?
最佳答案
假设“a_bunch_of_columns”相同(或者第二列的列是第一列的超集),那么你是正确的。
第一个索引的唯一优点是它占用的内存空间较小。但是,与完全删除索引相比,这是一个非常非常微不足道的优势。
关于sql - 冗余相似索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37986352/