包含另一个索引的所有列的多列索引
Multi Column index containing all columns of another index
如果我有一个多列索引 - 包含 2 列,我创建了一个包含这 2 列的第二个索引(作为第一个 2 - 相同的顺序)加上一个额外的第三列。是否需要保留只有 2 列的第一个索引?
不,不需要保留第一个索引。
我要强调的是,列的顺序很重要。因此,这仅适用于两个索引中的列以相同顺序以相同列开头的情况。
我可能会补充。 . .具有两列的索引有一个非常小的好处,一些数据库甚至可能会利用:索引更小。因此,如果您是内存受限的(与可用内存相比数据确实很大),那么您可能会遇到一些情况,其中 2 列索引可以放入内存,但较大的索引不会。我认为这是一个特殊的边缘案例,在实践中不太可能。
如果两列的顺序相同(前两个位置),那么保留初始索引就没有意义了。它很可能会停止使用。
顺便说一句,您可以将它们都保留一段时间,然后构建一个查询来不时检查 sys.dm_db_index_usage_stats table 以确认这一点...
如果我有一个多列索引 - 包含 2 列,我创建了一个包含这 2 列的第二个索引(作为第一个 2 - 相同的顺序)加上一个额外的第三列。是否需要保留只有 2 列的第一个索引?
不,不需要保留第一个索引。
我要强调的是,列的顺序很重要。因此,这仅适用于两个索引中的列以相同顺序以相同列开头的情况。
我可能会补充。 . .具有两列的索引有一个非常小的好处,一些数据库甚至可能会利用:索引更小。因此,如果您是内存受限的(与可用内存相比数据确实很大),那么您可能会遇到一些情况,其中 2 列索引可以放入内存,但较大的索引不会。我认为这是一个特殊的边缘案例,在实践中不太可能。
如果两列的顺序相同(前两个位置),那么保留初始索引就没有意义了。它很可能会停止使用。
顺便说一句,您可以将它们都保留一段时间,然后构建一个查询来不时检查 sys.dm_db_index_usage_stats table 以确认这一点...