テーブル「Persons」の「last_name」列に非クラスター化インデックスを作成しました
Select * From Persons
Where last_name = 'Hogg'
では、インデックスがすべての列を同時に返すことができず、代わりに RID ルックアップを行うのはなぜでしょうか? ここでインデックス作成はどのように機能しますか?
テーブル「Persons」の「last_name」列に非クラスター化インデックスを作成しました
Select * From Persons
Where last_name = 'Hogg'
では、インデックスがすべての列を同時に返すことができず、代わりに RID ルックアップを行うのはなぜでしょうか? ここでインデックス作成はどのように機能しますか?
インデックスは列のみをカバーし、last_name
その列に関するデータのみを含みます。一連のペアとして説明したインデックスについて、概念的に考えることができます。(last_name,row)
ここrow
で、 は実際のテーブルの特定の行への参照です。インデックスには、 で並べ替えられたペアlast_name
が格納されますが、テーブルに関する追加情報は格納されません。
クエリは のすべての列を要求しますPersons
。last_name
インデックスは"Hogg"である行を見つけるために使用されますが、データベースは追加の列を取得するためにテーブルを参照する必要があります。
必要なように見えるのは、対象の列のカバー インデックスです。「RID ルックアップ」という用語は、SQL Server を意味します。おそらく、SQL Server のカバリング インデックスとカバリング クエリとは何ですか? およびそれが指すページ: Using Covering Indexes to Improvement Query Performanceが役立ちます。