Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server中,多列非聚集索引中的列顺序是否重要?_Sql Server_Non Clustered Index - Fatal编程技术网

Sql server 在SQL Server中,多列非聚集索引中的列顺序是否重要?

Sql server 在SQL Server中,多列非聚集索引中的列顺序是否重要?,sql-server,non-clustered-index,Sql Server,Non Clustered Index,为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],[Co

为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]) 
是的,这很重要

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

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

  • 使用所有四列
  • 使用A、B、C列
  • 使用A、B列
  • 使用A列
但是,如果您使用

  • 就在D栏
  • C列和D列 等等
但是,如果只指定
D
,或
D
C
,则可能会使用第二个版本的索引,但如果只指定
A
B
,则永远不会使用该索引


只有当您总是使用索引中定义的所有列时,它们的定义顺序才变得(几乎)不相关(在按最高选择性排序等方面仍存在一些细微差别,但这些差别远不如在
SELECT
语句中不指定最左边的n列时不使用索引这一事实重要)

通过查询,您指的是WHERE子句右边的列?