1

テーブル「Persons」の「last_name」列に非クラスター化インデックスを作成しました

Select * From Persons
Where last_name = 'Hogg'

では、インデックスがすべての列を同時に返すことができず、代わりに RID ルックアップを行うのはなぜでしょうか? ここでインデックス作成はどのように機能しますか?

4

1 に答える 1

1

インデックスは列のみをカバーし、last_nameその列に関するデータのみを含みます。一連のペアとして説明したインデックスについて、概念的に考えることができます。(last_name,row)ここrowで、 は実際のテーブルの特定の行への参照です。インデックスには、 で並べ替えられたペアlast_nameが格納されますが、テーブルに関する追加情報は格納されません。

クエリは のすべての列を要求しますPersonslast_nameインデックスは"Hogg"である行を見つけるために使用されますが、データベースは追加の列を取得するためにテーブルを参照する必要があります。

必要なように見えるのは、対象の列のカバー インデックスです。「RID ルックアップ」という用語は、SQL Server を意味します。おそらく、SQL Server のカバリング インデックスとカバリング クエリとは何ですか? およびそれが指すページ: Using Covering Indexes to Improvement Query Performanceが役立ちます。

于 2013-11-11T01:04:18.467 に答える