10

为 SQL Server 表创建的多列非聚集索引中的列顺序真的很重要吗?

例如是

CREATE NONCLUSTERED INDEX [MultiFieldIndex_1]  
ON [Table_01] ([Column_A],[Column_B],[Column_C],[Column_D])

如同

CREATE NONCLUSTERED INDEX [MultiFieldIndex_1]  
ON [Table_01] ([Column_D],[Column_C],[Column_B],[Column_A]) 

?

4

1 回答 1

13

是的,这很重要!

如果您的查询包含该索引的最左侧的 n 列,则可能会使用索引

因此,对于您的第一个版本的 index MultiFieldIndex_1,如果您可以使用

  • 使用所有四列
  • 使用 A、B、C 列
  • 使用 A、B 列
  • 使用 A 列

但如果你使用它永远不会被考虑

  • 只是 D 列
  • C 列和 D 列等。

但是,如果您仅指定, 或and -则可能会使用您的索引的第二个版本,但如果您仅指定and则永远不会使用它DDCAB

仅当您始终使用索引中定义的所有列时,它们的定义顺序(几乎)变得无关紧要(关于按最高选择性排序等方面仍有一些细微差别,但这些比事实重要得多如果您未在SELECT语句中指定最左侧的 n 列,则永远不会使用索引)

于 2015-02-12T11:27:15.037 回答