列値のほとんどが固有な値である場合など、状況によっては、アルゴリズム圧縮の方が複数値圧縮よりも優れた圧縮結果を得られることがあります。アルゴリズム圧縮では、独自の圧縮と圧縮解除のアルゴリズムを定義して、それらを列レベルのデータに適用できます。
このアルゴリズムは、C/C++の外部スカラーUDFとして実装して、それをCREATE TABLE/ALTER TABLE文の定義で指定します。Vantageは、データをテーブルに移動するときや、テーブルからデータを取得するときに、それらのアルゴリズムを呼び出して列データを圧縮また圧縮解除します。
ALCを使用して、特定の列内のデータに最適な圧縮スキーマを実装します。圧縮および圧縮解除にかかるコストは、選択したアルゴリズムによって異なります。
ALCを単独で指定することも、MVCとALCの両方を同じ列に指定することもできます。両方を同じ列に定義すると、ALCは、MVCで圧縮対象になる値のリストで指定されていない非ヌルの値にのみ適用されます。
ALCをブロック レベル圧縮(BLC)と一緒に使用するとパフォーマンスが低下することがあるため、この方法はお勧めしません。
アルゴリズム圧縮を使用して、以下のデータ型のテーブル列を圧縮することができます。
- ARRAY
- BYTE
- VARBYTE
- BLOB
- CHARACTER
- VARCHAR
- CLOB
- JSON (次のいくつかの制限があります)
- TIMEおよびTIME WITH TIME ZONE
- TIMESTAMPおよびTIMESTAMP WITH TIME ZONE
- PERIOD型
- DISTINCTタイプUDT(下記の制限あり)
- システム定義UDT(下記の制限あり)