OracleSQLに実装すべき3つのSQLヒント

 業務アプリケーションを担当していて性能問題にぶつかることがあります。そんなとき半数以上がSQLの処理が遅いことが原因です。そこでSQLのチューニングを図ると思います。SQLのチューニングにはいくつかあります。

 私がよくやるのはSQLの書き換えです。結果が同じでも書き方がいくつもあり、速度が変わってきます。しかしSQLの書き換えを行うとテストに時間がかかります。そんなときはSQLは変更せずヒントを追加することで簡単に解決できることがあります。私が性能改善するときに利用するオススメのヒントを紹介します。

1.ORDERED

 このヒントを追加することでテーブルの結合順序をfromに記述されているテーブルの順番に変更できます。下の例では、a,b,cの順番に結合できます。
【記述例】

select /*+ORDERED*/
 *
from
 TABLE1 a
 ,TABLE2 b
 ,TABLE3 c
where
 a.USER_ID = b.USER_ID
 and b.USER_ID = c.USER_ID

2.LEADING

 このヒントを追加することでテーブルの結合順序をテーブルの別名で指定した順番に結合できます。下の例では、c,b,aの順番に結合できます。
 ※ORDEREDは順番を指定できませんが、LEADINGは指定できます。
【記述例】

select /*+LEADING(c,b,a)*/
 *
from
 TABLE1 a
 ,TABLE2 b
 ,TABLE3 c
where
 a.USER_ID = b.USER_ID
 and b.USER_ID = c.USER_ID

(adsbygoogle = window.adsbygoogle || []).push({});

3.INDEX

 このヒントを追加することで指定したテーブルのインデックスを利用することが出来ます。  
【記述例】

select /*+INDEX(a IDX_TABLE1_01)*/
 *
from
 TABLE1 a
 ,TABLE2 b
 ,TABLE3 c
where
 a.USER_ID = b.USER_ID
 and b.USER_ID = c.USER_ID

(補足)複数のヒントを指定する場合の書き方
 複数のヒントを指定する場合は、下のように書きます。
【記述例】

select /*+ORDERED INDEX(a IDX_TABLE1_01)*/
 *
from
 TABLE1 a
 ,TABLE2 b
 ,TABLE3 c
where
 a.USER_ID = b.USER_ID
 and b.USER_ID = c.USER_ID

最後に

 ヒントを書いたからといって、絶対にその通りに実行される訳ではありません。あくまでオプティマイザに対して推奨事項を提示しているに過ぎないのです。最後に決めるのはオプティマイザです。

>>おすすめのORACLE参考書まとめ





【SQLでお困りの方にオススメ】
■SQLが遅くなる原因
・SQLが突然遅くなる原因と対応方法
・OracleSQLのレスポンスが遅い原因3つ
・JOINを使って表結合するとSQLが遅い!?
・SQLがパラレル実行されない原因

■SQLチューニングの基礎知識
・ORACLE SQLのヒントとは
・ORACLEのオプティマイザと実行計画について
・ORACLEのテーブルやインデックスの「統計情報」とは

■SQLチューニングの方法
・SLECT文が遅いときのインデックス作成によるチューニング方法
・Update文が遅いときのチューニング方法
・Delete文が遅いときのチューニング方法
・IN句をEXISTS句に置き換えするチューニング方法
・OR句の置き換えによるチューニング方法
・IN句の置き換えによるチューニング方法
・テーブルアクセスフルスキャンを無くしてチューニングする方法
・SQLでGROUP BYが遅いときのチューニング方法
・SQLのソート処理が遅い場合のチューニング方法

■表や索引の断片化対策
・プロが教えるORACLEの表や索引の断片化解消の見積り方法
・ORACLE表の断片化を解消する3つの方法

■SQLのチューニングの補足情報
・ORACLE SQLヒントの書き方
・SQLに複数のヒントの書き方
・OracleSQLに実装すべき3つのSQLヒント
・ORACLE表の統計情報取得日の確認方法
・「統計情報が古い」とはどういうことか
・ORACLE表の統計情報の取得方法

【自己学習したい方にオススメ】
・自宅で勉強用にORACLEデータベースを無償でダウンロードし構築する方法
・OracleMasterGold12cに一ヵ月で合格した勉強方法
・OracleMasterExpertパフォーマンス&チューニングに一ヵ月で合格した勉強方法
・手に職がない人はIT業界へ、オススメ資格と勉強方法
・OracleDBのチューニング勉強方法
・OraclePL/SQL勉強方法