HINT句を使用してDBMSオプティマイザ効率を改善してみよう!
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 /* */