当我声明聚集索引时,按此顺序指定:column1
,column2
和column3
- 我是否需要按相同的顺序使用列?
例如,它是否会使用前面提到的聚集索引来更新多行:
UPDATE Table1
WHERE column3 = 1
AND column2 = 1
AND column1 = 1
答案 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'
都将执行相同的操作。