ここではORACLEデータベースでSQLにヒントの書き方やサンプルを紹介します。
SQLのヒントについて基礎的な内容は↓で紹介しています。
>>【ORACLE】SQLのヒントとは
SQLヒントの書き方
ヒントは、SELECT句の後ろに「/*+ ここにヒント*/」と書きます。
記述したヒントが間違って書る場合は、コメント扱いになります。コメント扱いになった場合は実行計画も変わらないので注意が必要です。
>>【SQL】オプティマイザと実行計画について
ヒントを使ったSQLサンプル
ここからはヒントを使ったSQLのサンプルを紹介します。
・インデックスを指定するヒント
select /*+INDEX(a IX_table1_001)*/ * from table1 a where a.col1 = :cond;
・結合順序を指定するヒント
FROM句に書いたテーブルの並びで結合する
SELECT /*+ORDERED*/ a.* FROM TAB1 a,TAB2 b WHERE a.COL1 = b.COL1
・結合順序を指定するヒント
結合の順序を任意に決める
SELECT /*+LEADING(b,a)*/ a.* FROM TAB1 a,TAB2 b WHERE a.COL1 = b.COL1
・結合方法を指定するヒント
テーブル同士をネステッドループで結合したい場合のヒント
SELECT /*+USE_NL(a b)*/ a.* FROM TAB1 a,TAB2 b WHERE a.COL1 = b.COL1
・結合方法を指定するヒント
テーブル同士をハッシュジョインで結合したい場合のヒント
SELECT /*+USE_HASH(a b)*/ a.* FROM TAB1 a,TAB2 b WHERE a.COL1 = b.COL1
・複数のヒントを指定する
ORDEREDヒントとUSE_NLを同時に利用した場合
SELECT /*+ORDERED USE_NL(a b)*/ a.* FROM TAB1 a,TAB2 b WHERE a.COL1 = b.COL1
主なヒント
主なヒントを紹介しています。
おすすめのヒントは「SQLに実装すべき3つのSQLヒント」で紹介していますのでぜひ参考にしてください。
・ORDERED
FROM句に書かれた順番でテーブルを結合します。
・INDEX(テーブル別名 インデックス名)
指定されたテーブルに、指定されたインデックスでアクセスを行います。
・FULL(テーブル別名)
指定されたテーブルのフルスキャンを行います。
・USE_NL(テーブル別名)
指定されたテーブルの結合時、ネステッドループ結合します。
・USE_HASH(テーブル別名a テーブル別名b)
指定されたテーブルの結合時、ハッシュ結合します。
・USE_MERGE(テーブル別名)
指定されたテーブルの結合時、ソートマージ結合します。
まとめ
ヒントは、SELECT句の後ろに「/*+ ここにヒント*/」と書きます。
インデックスを指定するものや結合順序、結合方法を指定するヒントがあります。
ヒントを使ったSQLのチューニングについては↓でも紹介していますのでぜひ参考にしてください。
>>SELECT文のSQLチューニング方法まとめ