次の表とコンテンツがあります
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)。
誰かがこれを片付けてくれますか?
テーブルの大部分は最初のクエリの条件に適合するため、条件に一致する各行に対してキー検索を行うよりも、クラスター化インデックスをスキャンする方が効率的です。
キー検索はコストがかかるため、通常は、テーブルのごく一部がWHERE基準に適合する場合にのみ使用されます。クエリがテーブルの特定のパーセンテージを返すと(転換点とも呼ばれます)、オプティマイザーはクラスター化インデックススキャンにフォールバックします。
The Tipping Point に関するKimberly Trippのブログ投稿を参照してください。