web-dev-qa-db-ja.com

クラスター化インデックススキャン(クラスター化)とインデックスシーク(非クラスター化)+キールックアップ(クラスター化)

次の表とコンテンツがあります

create table t(i int primary key, j int, k char(6000))
create  index ix on t(j)

insert into t values(1,1,1)
insert into t values(2,1,1)
insert into t values(3,1,1) 
insert into t values(4,1,1)
insert into t values(5,1,1)
insert into t values(6,1,1)
insert into t values(7,1,1)
insert into t values(8,2,2) 
insert into t values(9,2,2)

select * from t where j = 1
select * from t where j = 2

最初のSELECTがClustered Index Scan(Clustered)のみを使用するのに対し、2番目のSELECTはIndex Seek(NonClustered)およびKey Lookup(Clustered)

Execution Plans

誰かがこれを片付けてくれますか?

6
Diogo

テーブルの大部分は最初のクエリの条件に適合するため、条件に一致する各行に対してキー検索を行うよりも、クラスター化インデックスをスキャンする方が効率的です。

キー検索はコストがかかるため、通常は、テーブルのごく一部がWHERE基準に適合する場合にのみ使用されます。クエリがテーブルの特定のパーセンテージを返すと(転換点とも呼ばれます)、オプティマイザーはクラスター化インデックススキャンにフォールバックします。

The Tipping Point に関するKimberly Trippのブログ投稿を参照してください。

11
Chad Mattox