Mostly エンコード
Mostly エンコードは、列のデータ型が、格納された大部分の値で必要なサイズより大きい場合に有用です。このタイプの列に Mostly エンコードを指定して、列内の大部分の値を、より小さい標準ストレージサイズに圧縮することができます。圧縮できない残りの値は、raw 形式で格納されます。例えば、INT2 列などの 16 ビット列を 8 ビットストレージに圧縮できます。
一般的に、Mostly エンコードは次のデータ型に対して使用します。
-
SMALLINT/INT2 (16 ビット)
-
INTEGER/INT (32 ビット)
-
BIGINT/INT8 (64 ビット)
-
DECIMAL/NUMERIC (64 ビット)
列のデータ型のサイズに見合う Mostly エンコードの適切なバージョンを選択します。例えば、16 ビット整数列として定義された列に MOSTLY8 を適用します。MOSTLY16 を 16 ビットデータ型の列に適用したり、MOSTLY32 を 32 ビットデータ型の列に適用したりすることはできません。
列内の比較的多くの値を圧縮できない場合、Mostly エンコードは非圧縮の場合よりも効果が低くなります。これらのエンコードの 1 つを列に適用する前に、確認してください。現在ロードしようとしている (そして今後ロードする可能性が高い) 値のほとんどは、次のテーブルに示す範囲に収まるはずです。
エンコード | 圧縮ストレージサイズ | 圧縮できる値の範囲 (範囲外の値は raw として格納される) |
---|---|---|
MOSTLY8 | 1 バイト (8 ビット) | -128~127 |
MOSTLY16 | 2 バイト (16 ビット) | -32768~32767 |
MOSTLY32 | 4 バイト (32 ビット) | -2147483648~+2147483647 |
注記
10 進値では、値が範囲内にあるかどうかを判断する場合に小数点を無視します。例えば、1,234.56 は 123,456 として扱われ、MOSTLY32 列で圧縮できます。
例えば、VENUE テーブルの VENUEID 列が raw 整数列として定義されている場合は、その値が 4 バイトのストレージを消費することを意味します。しかし、列の値の現在の範囲は 0
~309
です。したがって、VENUEID に対して MOSTLY16 エンコードを使用してこのテーブルを再作成および再ロードすると、その列の各値のストレージが 2 バイトに減少します。
別のテーブルで参照される VENUEID 値のほとんどが 0~127 の範囲内にある場合、その外部キー列を MOSTLY8 としてエンコードすることは妥当と言えます。選択を行う前に、参照テーブルデータに対していくつかのクエリを実行して、ほとんどの値が 8 ビット、16 ビット、または 32 ビットの範囲内にあるかどうかを確認する必要があります。
次の表は、MOSTLY8、MOSTLY16、および MOSTLY32 エンコードが使用される場合の特定の数値の圧縮サイズを示しています。
元の値 | 元の INT または BIGINT (バイト) | MOSTLY8 圧縮サイズ (バイト) | MOSTLY16 圧縮サイズ (バイト) | MOSTLY32 圧縮サイズ (バイト) |
---|---|---|---|---|
1 | 4 | 1 | 2 | 4 |
10 | 4 | 1 | 2 | 4 |
100 | 4 | 1 | 2 | 4 |
1,000 | 4 | raw データサイズと同じ | 2 | 4 |
10000 | 4 | 2 | 4 | |
20000 | 4 | 2 | 4 | |
40000 | 8 | raw データサイズと同じ | 4 | |
100000 | 8 | 4 | ||
2000000000 | 8 | 4 |