http://www.sqlservercentral.com/articles/Stairway+Series/72284/
我正在阅读这篇sqlservercentral文章,他们正在使用它查询。
SELECT *
FROM Person.Contact
WHERE FirstName = 'Helen'
AND LastName = 'Meyer';
GO
并且为了使上述搜索速度更快,他们创建了以下索引。
CREATE NONCLUSTERED INDEX FullName
ON Person.Contact
( LastName, FirstName );
GO
我无法弄清楚where子句中的第一个名字,然后是姓氏。 并且在索引中它是相反的顺序(姓氏,名字)
当我们创建复合索引时,它如何产生差异。 我知道姓氏将先排序,然后firstname将被排序。
我通过两种方式创建索引来检查统计信息(lastname,firstname) 和(名字,姓氏)。
(lastname,firstname)方法稍快,我想知道WHY where子句顺序和索引列顺序是否相反?
答案 0 :(得分:0)
SQL Server(和大多数RDBMS)将忽略WHERE条件的顺序。
这是因为SQL是一种声明性语言:你说你不想怎么做。因此,查询优化器将重新排列WHERE条件以匹配合适的索引。
请注意,您将在查询计划中对聚簇索引进行密钥查找,以获取不在索引中的其余列,因为它没有覆盖。