多列非聚集索引中列的顺序在 SQL 服务器中是否重要?

Does the order of columns in an multicolumn non-clustered index matter in SQL Server?

为 SQL 服务器 table 创建的多列非聚集索引中的列顺序真的很重要吗?

例如是

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

?

是的,这很重要!

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

因此对于索引 MultiFieldIndex_1 的第一个版本,如果您

可能
  • 使用全部四列
  • 使用 A、B、C 列
  • 使用 A、B 列
  • 使用 A 列

但如果您使用

,它将不会被考虑
  • 只有 D 列
  • C 和 D 列 等等

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

,它将 永远不会 使用

只有当您总是使用索引中定义的所有列时,它们的定义顺序才变为(几乎) 无关紧要(关于按最高选择性排序等仍然存在一些细微差别,但与如果您未在 SELECT 语句)