ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
INDEXを使用しない検索(2)
スポンサード リンク

● INDEX列でLIKEは前方一致以外は、INDEXが使用されない
 ○ select * from emp where emp_id = 'E00%';

 × select * from emp where emp_id = '%001';

 × select * from emp where emp_id = '%00%';



● ORDER BY句の指定列が全てINDEXに指定ないと、ソートにINDEXが使用されない

 ORDER BY 句で指定する項目は、全てINDEXに含まれ、かつ、NOT NULL項目の場合は、高速にソートされます。



● 暗黙の型変換は、INDEXが使用されない
  WHERE句で指定した、列の型とデータの型が異なる場合、ORACLEは自動的に型変換を実行するが、型を自動変換する場合はINDEXが使用されない。
     dept_id が cahr型で定義されている場合
 × select * from dept where dept_id = 123;

 ○ select * from dept where dept_id = '123';



● 複合INDEXは先頭列から指定しないと、INDEXが使用されない
   以下の順番で複合INDEXを作成
 (1)emp_id
 (2)dept_id
 (3)job_id

  上記の複合INDEXの場合の、INDEXの使用/未使用となるWHERE句パターン
 ○ select * from emp where emp_id = 'E01' and dept_id = 'D01' and job_id = 'J01';

 ○ select * from emp where emp_id = 'E01' and dept_id = 'D01';

 ○ select * from emp where emp_id = 'E01' and job_id = 'J01';

 ○ select * from emp where emp_id = 'E01';

 × select * from emp where dept_id = 'D01';

 × select * from emp where job_id = 'J01';

 × select * from emp where dept_id = 'D01' and job_id = 'J01';

スポンサード リンク


大文字/小文字/空白や改行の数を統一する
バインド変数を使用する
ワイルドカード「 * 」は使用しない
ANDよりBETWEENの使用を検討する
HAVINGよりWHEREの使用を検討する
UNIONよりUNION ALLの使用を検討する
テーブルに別名を付ける
ROWIDの使用を検討する
列番号は使用しない
DISTINCT句よりEXISTS句の使用を検討する
NOT IN句よりNOT EXISTS句の使用を検討する
INDEX列を使用しない検索(1)
INDEX列を使用しない検索(2)

SQLチューニングへ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ