はい、クエリオプティマイザが、(フルスキャンを実行するよりも)「LastNameエントリの各ブロックをすばやく検索する」方がよいと判断した場合、このクエリはこのインデックスを使用する可能性があります(おそらく使用します)。 )テーブルの。
ただし、この特定のクエリではインデックスの(firstName)
方が効率的であるため、そのようなインデックスがある場合、SQL-Serverはそのインデックスを使用します(そしてインデックスシークを実行します)。
SQL-Server 2008 R2、Expressエディションでテスト済み:
CREATE TABLE Test.dbo.people
( lastName NVARCHAR(30) NOT NULL
, firstName NVARCHAR(30) NOT NULL
) ;
INSERT INTO people
VALUES
('Johnes', 'Alex'),
... --- about 300 rows
('Johnes', 'Bill'),
('Brown', 'Bill') ;
インデックスなしのクエリ、テーブルスキャン:
SELECT count(*)
FROM people
WHERE firstName = N'Bill' ;

インデックスをオンにしてクエリを実行し(lastName, firstName)
、インデックススキャン:
CREATE INDEX last_first_idx
ON people (lastName, firstName) ;
SELECT ...

インデックスをオンにしてクエリを実行し(firstName)
、インデックスシーク:
CREATE INDEX first_idx
ON people (firstName) ;
SELECT ...
