インデックス作成はクエリチューニングにおいて、劇的な改善が期待できる重要なものですが
それ以外にもチューニングする方法はあり〼
その一例
目次
1.データ型の見直し
2.必要なカラムのみ指定
3.サブクエリの見直し
4.IN を EXISTSに
5.DISTINCTをEXISTSに
6.ALLを使う
データ型の見直し
テーブルに設定したデータ型と入力したデータのデータ型が異なっていた場合、
変更可能であればエラーにならず暗黙の型変換が行われ、その分時間がかかる
必要なカラムのみ指定
SELECT時に *(ワイルドカード) を使っていると不要なカラムまで取得することになる
全てのカラムを取得したい場合も、カラム名に置き換える処理が内部で行われているので書いた方が良い
サブクエリの見直し
・テーブル結合で書き換えられる場合もある
・EXISTSを使用したサブクエリの場合はテーブル結合よりEXSISTの方が早い場合もある
IN を EXISTSに
・書き換えられる場合は、ワークテーブルが作られない分INより速い
・該当する値があった場合検索をストップ
・WHERE(結合キー)にインデックスが貼られていれば実テーブルを見にいかなくてよい
ただOracle、PostgreはINでも同じパフォーマンスを発揮できるようになってきている
DISTINCTをEXISTSに
・ソートを回避できる分速くなる
ALLを使う
・集合演算子(UNION INTERSECT EXCEPT)は必ず重複削除が行われる
・重複が発生しない(重複削除が不要な)場合はUNION ALL のようにALLを使う