更改复合索引中的列顺序?

时间:2013-06-17 14:07:39

标签: sql sql-server indexing

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子句顺序和索引列顺序是否相反?

1 个答案:

答案 0 :(得分:0)

SQL Server(和大多数RDBMS)将忽略WHERE条件的顺序。

这是因为SQL是一种声明性语言:你说你不想怎么做。因此,查询优化器将重新排列WHERE条件以匹配合适的索引。

请注意,您将在查询计划中对聚簇索引进行密钥查找,以获取不在索引中的其余列,因为它没有覆盖。