web-dev-qa-db-ja.com

列ストアインデックスはデータ領域を減らしますか?これはどのように可能ですか?

クエリの1つのパフォーマンスをテストしていました。別のインデックスを試していました。テーブルに列ストアインデックスを適用すると、テーブルサイズが70〜80%減少しました。これはどのようにして可能ですか?

2
Mad Frog

列ストアは、ディスク上のデータを「通常の」テーブルが行う方法とは異なる方法で配置します。列の値は、100万を超える値のセグメントに分割されます。各セグメントは圧縮されています。単一の列の値は多くの繰り返しを示す可能性があるため(「国コード」または「製品名」と考えてください)、圧縮率は重要になる可能性があります。

読み取りパフォーマンスは、いくつかの要因から改善できます。まず、クエリで必要な列のみがディスクから読み取られます。 2番目に、圧縮とは、行ストアと比較して、指定された数の値に対してIOがはるかに少ないことを意味します。3番目に、集約関数は、CPUキャッシュの利用に最適化された「バッチモード」と呼ばれるもので実行できます。

rowstores の圧縮も利用できます。私の経験では、CPU使用率は増加しますが、IO低下し、経過クエリ時間の正味が向上します。これは、レポートと分析を実行する適度に大規模なデータベースの場合でした。

もちろん、走行距離は異なる場合があります。

5
Michael Green