|
スポンサード リンク
● 列番号は使用しない
ORDER BY句に列番号で指定した場合、SQL解析時に読み替え処理が発生するのでパフォーマンス低下に繋がる
|
○ select a.emp_id, a.emp_name from emp a order by salary;
× select a.emp_id, a.emp_name from emp a order by 5; |
● DISTINCT句よりEXISTS句の使用を検討する
DISTINCTは、条件に一致するレコードを取り出し暗黙のソート処理後に重複レコードを排除することに対し、EXISTS句は条件に一致するレコード1件でもあればそこで処理は終了する為、暗黙のソート処理をしない分、DISTINCTに比べると負荷が小さくなる
|
× select distinct a.emp_id, a.dept_id from emp a,dept b
where a.dept_id = b.dept_id;
○ select a.emp_id, a.dept_id from emp a
where exists (select 'X' from dept_b where a.dept_id = b.dept_id); |
※DISTINCTの他にも、GROUP BYやUNION、INTERSEST、MINUS等は暗黙のソート処理が実行されるので、極力使用を避けた方が良い。
● NOT IN句よりNOT EXISTS句の使用を検討る
NOT IN句は、内部的にソートマージの結合をすることでテーブルをフルスキャンするのに対し、NOT EXISTS句は条件に一致するレコード1件でもあればそこで処理は終了する為、NOT IN句に比べると負荷が小さくなる
|
× select distinct a.emp_id, a.dept_id from emp a
where a.dept_id not in (select b.dept_id from dept where job_id = 'J01');
○ select a.emp_id, a.dept_id from emp a
where not exists (select 'X' from dept_b where a.dept_id = b.dept_id and
job_id = 'J01'); |
スポンサード リンク
|