0

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 子句中的名字,然后是姓氏。并且在索引中它的顺序相反(姓氏,名字)

当我们创建复合索引时,它在这里有何不同。我知道姓氏将首先排序,然后名字将被排序。

我通过以两种方式(姓氏,名字)和(名字,姓氏)创建索引来检查统计信息。

(lastname, firstname) 方法稍微快一些,我想知道为什么 where 子句顺序和索引列顺序相反?

4

1 回答 1

1

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

发生这种情况是因为 SQL 是一种声明性语言:你说你想要什么,而不是如何去做。因此查询优化器将重新排列 WHERE 条件以匹配合适的索引。

请注意,您将在查询计划中对聚集索引进行键查找,以获取由于未覆盖而不在索引中的其余列。

于 2013-06-17T14:34:22.037 回答