2

次の表があるとしましょう。

CREATE TABLE T (
 ID INT,
 String1 nvarchar(400),
 String2 nvarchar(400)
)

そしてクエリ:

select String1, String2, count(*)
from T
group by String1, String2

Tが列ストアインデックスによってインデックス付けされた場合、このグループ化クエリは通常、非クラスター化列ストアインデックススキャンによって駆動されます。

列ストアインデックスが行を列ごとの形式で格納し、各列が個別に並べ替えられている場合、行ごとに一度に複数の列を提供するにはどうすればよいでしょうか。個々の列は異なるソート順でソートされているため、これは不可能のようです。個々の列をマージして、両方の列(この例ではString1、String2)を含む完全な行に戻す方法は考えられません。

これは内部でどのように機能しますか?

4

1 に答える 1

2

各列は個別に格納されるため、システムは列インデックスに複数回アクセスし(選択した列ごとに1つ)、結果を内部的に結合して最終的なクエリ結果を返す必要があります。列ストアインデックスは必要なI/Oを大幅に削減するため、これは依然として非常に効率的ですが、クエリされる多数の列は低速になる可能性があります。

于 2012-03-18T21:05:00.737 に答える