2016-08-30 8 views
2

SQL Management Studioでクエリを実行し、実行計画をチェックしました。クラスタ化されていない索引スキャン・ステップによっては、索引付けされ結合された列ではなく、表のPK列が戻されるものがあります。例:テーブルの上にMS SQL実行計画の未使用列

select a.c10, b.c20 
from a inner join b on a.c11 = b.c21 
where a.c12 = 23 

度:

create unique nonclustered index ix_a_1 on a (a.c12 asc) include (a.c13, a.c14) 

クエリプランが示す:

index seek, nonclustered, ix_a_1 , output list: a.primary_key_col 

列a.primary_key_colは、クエリで使用されていません。これが出力リストに含まれる唯一の列である理由は何ですか?

答えて

6

PK列は、列c10とc11を得るためにクラスタード・インデックス(PKと仮定)を調べるために必要です。これは、「キーのルックアップ」として知られている

それは

を「覆い」されるように、この

create nonclustered index ix_a_gbn on a (c12, c11) include (c10, c13, c14) 

Some background reading from Simple Talke via Google

を試してみて作るか、非クラスタ化インデックスを変更することで、これを削除することができます