2012-03-18 11 views
2

は、我々は次の表があるとしましょう:SQL Server 2012:列ストアインデックスは、一度に複数の列を提供する方法を教えてください。

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

と問合せ:

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

Tがcolumn-store indexによってインデックスされた場合は、このグループのクエリは、一般的に非クラスタ化、カラム・によって駆動されます索引スキャンを保管する。

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

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

+1

列ストア索引の内部構造は、現時点で十分に文書化されていません(また、文書が繰り返し独自仕様のメソッドを参照しているとは確信できません)。しかし、あなたは[この回答](http://dba.stackexchange.com/a/10529/3690)(およびコメント内のリンク)が役に立つかもしれません。パワーポイントプレゼンテーションでは、セグメントキーとジョイン・インデックスについて説明します。 –

答えて

2

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

関連する問題