多列非聚簇索引中的列顺序是否在SQL Server中很重要?

时间:2015-02-12 11:07:38

标签: sql-server non-clustered-index

为SQL Server表创建的多列非聚簇索引中的列顺序是否真的重要?

E.g。是

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]) 

1 个答案:

答案 0 :(得分:8)

是的,这很重要!

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

因此,使用您的第一个版本的索引MultiFieldIndex_1,如果您

可能
  • 使用所有四列
  • 使用A,B,C列
  • 使用A,B列
  • 使用A栏

但如果您使用

NOT 将会被考虑
  • 只是D栏
  • C和D列 等

但是,如果您只指定DDC,则可以使用索引的第二个版本< - >,但它会如果您只指定AB

,则永远不会

只有当您始终使用索引中定义的所有列时,它们的定义顺序才会(几乎)无关紧要(仍有一些细微差别至于按最高选择性等排序,但是如果你没有在SELECT陈述中指定n个最左边的列,则不会使用索引这一事实重要性