質問

SQL Server 2012コードネームの新機能の1つ Denali それは ColumnStoreインデックス。

私は、Bツリー構造、葉のレベルとBツリーページ間の保管の違い、含まれるフィールドの影響、それらの使用の最適化、キーの順序などなど、通常の古い列階のインデックスについてよく知っています。

私は良い情報を得るのが難しいです 内部 列ストアインデックスの。

  • どのように構造化されていますか?
  • Bツリーはありますか?他のいくつかの構造が整っていますか?
  • データはどのように編成されていますか?
  • どのような種類のオペレーターがそれを使用するのに最適ですか?
  • それらを使用するときに避けるべき他の反パターンはありますか?

私がそれらについて知ることができることの多くは、基本的に「通常の」インデックスの正反対です。つまり、キーの順序付け、含まれているフィールドはありません。

どんな洞察も感謝しています。

役に立ちましたか?

解決

列ストア構造

ColumnStoreデータは物理的に保存されています 1つ以上 セグメント 列あたりの(通常のLOB割り当て単位)。また、通常の方法で分割される場合があります。各セグメントには、約100万行の高度に圧縮された値または値参照が含まれています(いくつかの圧縮技術が利用可能です)。値参照は、最大2つのうちの1つのエントリにリンクします ハッシュ辞書.

辞書はそうです メモリに固定されています クエリの実行中、実行には実際のデータ値が必要な場合はいつでも、セグメントからのデータ値IDが辞書で検索されます(このルックアップは、パフォーマンス上の理由で可能な限り延期されます)。

セグメントには、セグメントに保存されている最小値や最大値などのメタデータを含むヘッダーレコードもあります。ヘッダーからの情報は、しばしば使用できます 排除 実行時に処理してからパーティションを完了します。ヘッダーレコード情報は通常のLOBデータルート構造に保存されるため、セグメントを排除すると、ストレージエンジンが物理ストレージからLOBデータページの読み取りをスキップできることを意味します。排除の可能性を最大化するには、必要です 慎重な設計, 、aを含む 依存 列ストアインデックスが構築された時点でのクラスター化されたインデックス順序で。

特定のプランオペレーター

SQL Server 2012は、Batchモードと呼ばれる新しい実行モードを導入します。このモードでは、オペレーター間で約1000行のパケットが渡され、プロセッサ利用効率が大幅に改善されます。各パケット内で、列データはベクトルとして表されます。すべてのプランオペレーターがバッチモードの操作をサポートするわけではありませんが、列ストアインデックススキャン、ハッシュインナー、バッチハッシュテーブルビルド、ビットマップフィルター、ハッシュアグリゲートを含む例の例 スカラー 集合体)、フィルター、および計算スカラー(投影および発現評価用)。クエリ実行計画は、推定された実行モードと実際の実行モードを示すために強化されています。

アンチパターン

許容の制約を含む、最初のリリースには多くの制限があります データ型. 。最も一般的なタイプがサポートされています。サポートされていないデータ型には含まれます DECIMAL 18桁を超える精度で、 (N)VARCHAR(MAX), UNIQUEIDENTIFIER, 、CLRタイプ、および (VAR)BINARY.

の使用 文字列タイプ, OUTER JOIN, IN, EXISTS, NOT IN, OR, UNION ALL このセクションのリンクされた記事に示すように、通常、異常な構文書き換えを含む回避策が採用されていない限り、パフォーマンスが大幅に低下する可能性があります(行モードの実行)。

詳しくは

Remus Rusanuは素晴らしい概要をブログに書きました ここ.

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top