ここではORACLEデータベースのSQLで実装すべきおすすめの3つのヒントを紹介しています。
ヒントについては↓で詳しく解説していますので参考にしてください。
>>【ORACLE】SQLのヒントとは
>>【ORACLE】SQLヒントの書き方:サンプル多数あり
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
*
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
*
from
TABLE1 a
,TABLE2 b
,TABLE3 c
where
a.USER_ID = b.USER_ID
and b.USER_ID = c.USER_ID
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
*
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
*
from
TABLE1 a
,TABLE2 b
,TABLE3 c
where
a.USER_ID = b.USER_ID
and b.USER_ID = c.USER_ID
まとめ
おすすめのヒントは次の3つです。
・ORDERED
・LEADING
・INDEX
ヒント以外のSQLチューニングの方法について↓で紹介していますので参考にしてください。
>>SELECT文のSQLチューニング方法まとめ