我们有一个主表,它通过许多列来驱动我们产品中的大部分工作。
索引 1 的键包括:A 列、B 列、C 列、D 列
索引 2 的键包括:Column D、Column A、Column B
包含几乎相同,除了索引 2 将列 C 作为包含而索引 1 将其包含在键中。
Index 2 会成为放弃支持 Index 1 的候选者吗?
我们有一个主表,它通过许多列来驱动我们产品中的大部分工作。
索引 1 的键包括:A 列、B 列、C 列、D 列
索引 2 的键包括:Column D、Column A、Column B
包含几乎相同,除了索引 2 将列 C 作为包含而索引 1 将其包含在键中。
Index 2 会成为放弃支持 Index 1 的候选者吗?
一般来说,不,这两个指标是不等价的。但这完全取决于您要优化的查询。
一般来说,索引中的列只有在从左到右键的列都被相等约束(ColumnA = somevalue)时才能使用。其中一列也可以受到不等式的约束(ColumnB > somevalue),但是不等式右侧的列无法从索引中受益。
因此,例如,如果您有以下谓词:
sql-server 可以使用 Index 1 但不能使用 Index 2,因为 ColumnD 上没有谓词,它是 Index2 上的第一个。
索引也可用于分组或排序,但适用相同的规则。
可以使用 Index 2 来加速排序,但不能使用 Index 1。