HINT句を使用してDBMSオプティマイザ効率を改善してみよう!

2024年3月23日テクニカルメモ

HINT句とは

DBMS オプティマイザのヒントを使用して、実行プランを変更することができます。
WebFOCUSのアダプタには、TABLE コマンドの実行時にデータベースに送信される SELECT キーワードの後にヒントを追加する設定があります。

ポイント
データベースの種類によって書き方が異なります。
詳細は『データアダプタリファレンス』をご参照ください。

HINT句の構文

Oracle の場合

ENGINE SQLORA SET HINT /* +hint_text */

SQL Server や Azure SQL Database(OLEDB)の場合

ENGINE SQLMSS SET HINT OPTION (hint_text)

※「ENGINE xxx SET HINT ~」は 「SQL xxx SET HINT ~」と書いても同じ意味です。

プロシジャの記述例

Oracle の EMP 表を利用した場合のサンプルです

ENGINE SQLORA SET HINT /* +USE_HASH PARALLEL(EMPNO) INDEX_ASC */
TABLE FILE EMP
 PRINT EMPNO
       SAL
 BY    DEPTNO
 WHERE DEPTNO GE 5
END

発行されるSQLの例

 SELECT
/* +USE_HASH PARALLEL(EMPNO) INDEX_ASC */
T1."EMPNO",
T1."SAL",
T1."DEPTNO"
 FROM
SCOTT.EMP T1
 WHERE
(T1."DEPTNO" >= 5)
 ORDER BY
T1."DEPTNO";

HINT句の影響範囲

HINT句が指定されたコマンド行よりも下の「INCLUDEコマンド、EXコマンドの内容を含むすべてのTABLEリクエスト」にHINT句が適用されます。そのため、複数のTABLEリクエストがあり2つ目以降のリクエストにはHINT句を利用したくない場合は、以下のようにhint_textを削除したコマンドを直前に指定してください。

Oracle の場合

ENGINE SQLORA SET HINT /* */