SQLに実装すべき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

最後に

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

SQLに実装すべき3つのSQLヒント” に対して1件のコメントがあります。

この投稿はコメントできません。