我是否需要按照我声明的顺序使用多列SQL Server索引?

时间:2010-08-06 01:55:54

标签: sql sql-server

当我声明聚集索引时,按此顺序指定:column1column2column3 - 我是否需要按相同的顺序使用列?

例如,它是否会使用前面提到的聚集索引来更新多行:

 UPDATE Table1     
   WHERE column3 = 1 
      AND column2 = 1 
      AND column1 = 1

2 个答案:

答案 0 :(得分:3)

您使用的顺序声明Where子句中的项目,如您所述,不应该对数据库服务器是否能够使用涵盖这些列的索引产生影响。

答案 1 :(得分:1)

确实,当您检查确切的相等性时,该顺序并不重要。

但这并不是说索引中的顺序无关紧要 - 也许这就是你的同事试图说的。例如,如果我有一个表:

PersonID  FName    LName
--------  -------  -----
1         John     Smith
2         Bill     Jones
3         Frank    Smith
4         Jane     Jackson
...
(assume a significantly large table)

我按顺序(LName,FName)定义了一个索引,该索引的执行次数必然与订单中定义的索引(FName,LName)不同,具体取决于查询的内容。

例如,对于查询: SELECT * FROM People WHERE LName = 'Smith',您很可能会为第一种索引获得比第二种索引更好的计划。

同样地, SELECT * FROM People WHERE FName = 'John'在第一个索引结构上的表现会更好。

和 无论索引创建的顺序如何,SELECT * FROM People WHERE FName = 'John' AND LName = 'Smith'都将执行相同的操作。