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

Pri*_*l85 6 sql-server non-clustered-index

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

例如是

CREATE NONCLUSTERED INDEX [MultiFieldIndex_1]  
ON [Table_01] ([Column_A],[Column_B],[Column_C],[Column_D])
Run Code Online (Sandbox Code Playgroud)

与...一样

CREATE NONCLUSTERED INDEX [MultiFieldIndex_1]  
ON [Table_01] ([Column_D],[Column_C],[Column_B],[Column_A]) 
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 8

是的,这很重要!

该指数可能会被使用,如果您的查询包括N位,最该索引的列.

因此,对于您的第一个索引版本,如果您使用MultiFieldIndex_1它,则可能会使用它

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

但它不是以往任何时候都可以,如果你使用的考虑

  • 只是D栏
  • 列C和D等

然而,你的索引的第二个版本可能会,如果你只指定使用D,或DC-但它永远不会被使用,如果你只是指定AB

只有当你总是使用索引中定义的所有列时,它们被定义的顺序变得(几乎)无关紧要(对于按最高选择性等排序仍有一些细微差别,但这些不如事实重要.如果您未在SELECT语句中指定n个最左侧的列,则不会使用索引)

  • 查询是指 WHERE 子句中的列,对吗? (2认同)