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

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

区分パラメータ説明
GeneralALLNODES ★EXPLAINで実行計画を参照する際に、あるノードがダウンしている場合であっても、全ノードがアクティブであると仮定した場合の結果を返すよう強制します
DIRECTINSERT/MERGE/UPDATE実行時にWOS(メモリ)ではなく、ROS(Disk)に更新します
LABELクエリを識別するラベルを定義します
JoinSYNTACTIC_JOIN ★JOINの実行時に、結合の順番をSQLに記述された通りの順番に強制します。また、DISTRIB、JTYPEヒント使用時にも指定する必要があります。
DISTRIB ★結合データの配布方法(Local, Broadcast, Resegmenton join key, Filter, Any)を強制します
JTYPE ★結合タイプ(Hash結合、またはMerge結合)を強制します
TablePROJSクエリーで使用するプロジェクションを強制します
SKIP_PROJSクエリーで使用しないプロジェクションを強制します
Directed queryIGNORECONST ★Directedqueryとして保存したクエリにおいて、WHERE句などに指定する値が異なっていても、保存した実行計画で実行するよう強制します。旧バージョンで使用していた実行計画を変えたくない場合等に使用します。
VERBATIM ★Directedqueryとして保存したクエリにおいて、WHERE句などに指定する値を含めて同じ構文のクエリを実行した場合のみ、保存した実行計画で実行するよう強制します。旧バージョンで使用していた実行計画を変えたくない場合等に使用します。
※★ 7.2で追加されたヒントです。

ヒントの使用例

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

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

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

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

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

検証バージョンについて

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