Vertica 7.2からSQLで使用可能なヒントが追加されました。
これまでも、「/*+direct*/」や「/*+label()*/」といったヒントはありましたが、7.2からはヒント句を利用して、JOINの順序や使用するプロジェクションを強制したりできるようになりました。

Vertica 7.2~9.2で利用可能なヒントの一覧

区分パラメータ説明
GeneralALLNODESEXPLAINで実行計画を参照する際に、あるノードがダウンしている場合であっても、全ノードがアクティブであると仮定した場合の結果を返すよう強制します
ENABLE_WITH_CLAUSE_MATERIALIZATION特定のクエリに対するマテリアライゼーションの有効/無効を設定します
EARLY_MATERIALIZATION実行対象のクエリに対して、早期にマテリアライゼーションを行います
DIRECTINSERT/MERGE/UPDATE実行時にWOS(メモリ)ではなく、ROS(Disk)に更新します
LABELクエリを識別するラベルを定義します
JoinSYNTACTIC_JOINJOINの実行時に、結合の順番をSQLに記述された通りの順番に強制します。また、DISTRIB、JTYPEヒント使用時にも指定する必要があります。
GBYTYPEオプティマイザがGROUP BYを実行するアルゴリズムを指定します。(HASH、またはPIPELINED)
DISTRIB結合データの配布方法(Local, Broadcast, Resegmenton join key, Filter, Any)を強制します
JTYPE結合タイプ(Hash結合、またはMerge結合)を強制します
UTYPEUNION ALLの実行方法を指定します
TablePROJSクエリーで使用するプロジェクションを強制します
SKIP_PROJSクエリーで使用しないプロジェクションを強制します
Directed queryIGNORECONSTDirectedqueryとして保存したクエリにおいて、WHERE句などに指定する値が異なっていても、保存した実行計画で実行するよう強制します。旧バージョンで使用していた実行計画を変えたくない場合等に使用します。
VERBATIMDirectedqueryとして保存したクエリにおいて、WHERE句などに指定する値を含めて同じ構文のクエリを実行した場合のみ、保存した実行計画で実行するよう強制します。旧バージョンで使用していた実行計画を変えたくない場合等に使用します。

ヒントの使用例

本例ではPROJSヒントを利用して、指定したプロジェクションの利用を強制する例を記載します。

PROJSヒントを使用しない場合の実行計画

★EXPLAINで実行計画を確認すると、ヒントを使用しない場合は、t1_DBD_rep_test_dbd_1プロジェクションが使用されることが確認できます。

PROJSヒントを使用した場合の実行計画

★ヒントを使用した場合は、t1_DBD_rep_test_dbd_2プロジェクションが使用されることが確認できます。

検証バージョンについて

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

更新履歴

2019/04/22 ヒント句を追加。検証バージョンを9.2に変更
2015/12/15 本記事を公開