2012-03-28 17 views
4

列ストアインデックスの利点の1つは、単一の列のデータが「ディスク上に互いに隣り合って」格納されることです。これは、より良い圧縮と読み込み時間の短縮を意味します。SQL Server 2012:パフォーマンス列ストアインデックスとBツリー

ただし、 Bツリー(通常のクラスタ化されていないインデックス)を使用する場合、そのツリー自体のリーフではありませんか?ですから、列Aのインデックスを作成すると、列Aのすべてのフィールドがテーブルと並行してディスク上に並べ替えられないように見えますか?これは、データが圧縮され、高速で読み取ることができることを意味します。

要するに、columnstore-indexは、単一の列のB-treeよりもパフォーマンスが良いでしょうか?

ありがとうございます!

答えて

1

したがって、列Aのインデックスを作成すると、列A のすべてのフィールドが、テーブルと並行してディスク上に並べ替えられないように見えますか?

はい、列Aがソートされます。しかし、他の列はすべて表示されません。列ストア索引は、すべての列をソート順(2〜20行のチャンク)で格納します。

+0

しかし、列Aから何かを選択すると、どちらの場合でもAのすべてのデータがソートされます。だから私は、他の列を照会するときにcolumnstore-indexがより効率的であると仮定することができますか? しかし、私は単にこれらの列にBツリーを配置するだけですか? – Gurdt

+0

データをソートする必要がある場合、B-Treeはソート操作をまったく必要としません(要求する列がインデックスのプレフィックスである場合)。列ストアは、2^20行ごとに格納されているため、ソートされた列をソートできません。このようなセグメントが複数ある場合、ソート順を指定することはできません。 – usr

+0

私はここにいくつかの誤解があるかもしれないと思います。 列ストアインデックスの目的は、関連する列のみを読み込むことができるため、ディスクからデータを読み込む際のオーバーヘッドが少ないことです。行ストアからロードするときは、行全体をフェッチするため、必要のない列がロードされます。 ケースは次のとおりです。単純なBツリー(非クラスタ化インデックス)とは対照的に、1つの列だけに興味がある場合、Aといって、列ストアインデックスがどのように優れているか実際には、クラスタ化されていないインデックスのリーフは、フィールドとしてフィールドとして格納され、可能な限りコンパクトです。 – Gurdt

関連する問題