我在下面列出了一些索引
在这里,我认为重复索引是IndexA。 但在阅读了一些互联网博客后,我发现IndexD,IndexE和IndexA都是多余的。
答案 0 :(得分:2)
这取决于您的查询模式。
如果你只检查col1,col2上的相等性,则索引A是多余的。当然我可以删除索引A,因为它可以满足的所有查询都满足索引B ..
索引B可能有用的情况很少,下面是一个例子
select col1,col2 from tbl where
col1=someval and col2>someval
其他索引对于少数类型的查询更有效。同时您不能拥有通用索引,您必须查询并查看哪个索引对该查询有帮助,并根据该索引创建索引
答案 1 :(得分:1)
如果任何索引是唯一的,那么它就不能归入更广泛的重叠索引,因为唯一性会丢失。
如果过滤了任何索引,那么它可能不会被包含。
在您的示例中,只有IndexA可能重叠,除非用于唯一性。
IndexD和IndexE可能是,它取决于选择性和查询模式
如果可能将这些作为(Column3,Column1)和(Column4,Column1)或一个组合索引,或删除它们并使用sp_blitzindex来查找更多
还有更多选择。例如,重新排序IndexB或计算出可能是简单的INCLUDE
答案 2 :(得分:0)
根据Column1和Column2的选择性,您可以通过在IndexA上将Column3,Column4和Column5添加为包含的列来使IndexB冗余。在某些情况下,特别是索引将包含大量非叶页的情况,这将提供更好的性能,因为包含的列将仅存储在叶页上。