【发布时间】:2026-02-03 13:55:01
【问题描述】:
如果我有一个多列索引 - 包含 2 列,我创建一个包含这 2 列的第二个索引(作为第 2 个 - 相同的顺序)加上一个额外的第 3 列。是否需要只保留 2 列的第一个索引?
【问题讨论】:
标签: sql indexing multiple-columns clustered-index non-clustered-index
如果我有一个多列索引 - 包含 2 列,我创建一个包含这 2 列的第二个索引(作为第 2 个 - 相同的顺序)加上一个额外的第 3 列。是否需要只保留 2 列的第一个索引?
【问题讨论】:
标签: sql indexing multiple-columns clustered-index non-clustered-index
如果两列的顺序相同(在前两个位置上),那么保留初始索引是没有意义的。它很可能会停止使用。
顺便说一句,您可以将它们都保留一段时间并构建查询以不时检查sys.dm_db_index_usage_stats 表以确认这一点...
【讨论】:
不,不需要保留第一个索引。
我应该强调列的顺序很重要。因此,这仅适用于两个索引中的列以相同顺序以相同列开头的情况。
我可能会添加 . . .具有两列的索引有一个非常微小的好处,一些数据库甚至可以利用:索引更小。因此,如果您受内存限制(与可用内存相比,数据确实很大),那么您可能会遇到一些情况,即 2 列索引可以放入内存但较大的索引不能。我认为这是一个特殊的极端情况,在实践中不太可能。
【讨论】: