索引を使用できないSQLと対処方法

| コメント(0)

NULL値の検索

OracleではB*Tree索引にNULL値のデータを含まないため、IS NULL検索では、索引を使用することができません。従って、検索条件列に索引が作成されていても全表スキャンとなってしまいます。

ケース SQLの例 対処方法
NULL値の検索 ・列名 IS NULL ‐NULL値を別のデータに置き換える
‐ビットマップ索引を使用する
暗黙の型変換 ・CHAR列 = 1
・VARCHAR2列 = 1
‐比較するデータ型を列のデータ型に合わせる
  CHAR列 = '1'
  CHAR列 = TO_CHAR(1)
‐INDEXヒントを使用する(索引列にNOT NULL制約が必要)
索引列に対して、関数や算術を実施 ・VARCHAR2列||'様' = '斉藤様'
・NUMBER列 * 20 = 10000
・substr(VARCHAR2列,1,2) = 'AB'
‐関数、演算を右辺(索引列でない方)に移動する
 ・VARCHAR2列 = '斉藤'
 ・NUMBER列 = 10000/20
 ・VARCHAR2列 LIKE 'AB%'
‐関数索引を使用する(Oracle 9i以上で使用可能)
[例]
CREATE INDEX SUBSTR_IDX ON
SUPPLIER ( SUBSTR(列名,4,6) );
‐INDEXヒントを使用する(索引列にNOT NULL制約が必要)
LIKEの中間一致、後方一致 ・列名 LIKE'%TEST%'
・列名 LIKE'%TEST'
‐INDEXヒントを使用する(索引列にNOT NULL制約が必要)
!=、<>の使用 (Not Equals) ・列名 != '1' ・列名 <> '1' ‐inで置き換える(可能な場合)
 ・列名 in ('2','3')
  注)inで指定できる最大リスト数は1000個
‐INDEXヒントを使用する(索引列にNOT NULL制約が必要)

コメントする

OpenID等によりサインインすることによりコメントが即時承認されます。