プロジェクションの概要

Verticaのテーブルは実データを持たない論理スキーマであり、実データはプロジェクションに格納されています。プロジェクションは自動でテーブルデータを最適な形でソート、圧縮して保持しており、Verticaの検索パフォーマンスを向上させる上で重要なオブジェクトです。

また、特定のクエリのパフォーマンスを向上させるために、そのクエリ専用のプロジェクションを追加で作成することも可能です。

この場合、該当のテーブルに対して検索を行うとVerticaのオプティマイザが最適なプロジェクションを選択して処理を実行するため、利用者はプロジェクションを意識することなくクエリを発行できます。


プロジェクションの種類

プロジェクションには以下の種類があります。

projection_type

スーパープロジェクション/最適化スーパープロジェクション

全列のデータを保持しているプロジェクションです。テーブルを作成後にデータをロードするとスーパープロジェクションが1つ作成されます。この状態では、データの最適なソートや圧縮はされていませんが、別途プロジェクションの最適化を行うことで最適なソートや圧縮処理が行われ、最適化されたスーパープロジェクションに作り替えられます。
通常はこの最適化されたスーパープロジェクションが1つあれば高速なクエリパフォーマンスを得られますが、必要に応じて以下のようなプロジェクションを追加で作成することもできます。

【参考】
スーパープロジェクションの最適化
http://vertica-tech.ashisuto.co.jp/designed_super-projections/

Management Consoleを利用したプロジェクションの最適化~DBD編~
http://vertica-tech.ashisuto.co.jp/beginner_vertica_3/

admintoolsを利用したDatabase Designerの実行手順
http://vertica-tech.ashisuto.co.jp/execute-database-designer-using-admintools


クエリスペシフィックプロジェクション

特定のクエリのパフォーマンス向上を目的とするプロジェクションです。
該当のクエリの実行に必要な列のみを保持しており、そのクエリに特化したソートや圧縮が行われています。

【参考】
Management Consoleを利用したクエリスペシフィックプロジェクションの作成方法
http://vertica-tech.ashisuto.co.jp/create-query-specific-projection/

プリジョインプロジェクション

特定のジョインを使用したクエリのパフォーマンス向上を目的とするプロジェクションです。
該当クエリのジョインを実施した状態のデータをプロジェクションとして保持しておきます。これにより、そのクエリを実行する際はジョインのステップを省いて処理が行われるようになります。

ライブアグリゲートプロジェクション

集計処理を行うような特定のクエリのパフォーマンス向上を目的とするプロジェクションです。
該当クエリの集計処理(SUM関数等)を実施した状態のデータをプロジェクションとして保持しておきます。これにより、そのクエリを実行する際は集計のステップを省いて処理が行われるようになります。

検証バージョンについて

この記事の内容はVertica 7.1で確認しています。