1

本番環境には Oracle 11G R2 があります。

1 つのクエリのパフォーマンスを改善したい

select .... 
  from FORMX 
 where (INF_TYP  =?)
   AND (STATUS IN (?, ?, ?, ?, ?, ?)) 
   AND ((VAL_DAT>=? OR VAL_DAT  IS NULL));

VAL_DAT列のタイプは ですDATE。インデックスを追加してVAL_DATも目に見える効果はありません。

どのように調整できるか、またはクエリを変更する方法はありますか?

編集

そのテーブルには合計で約 150,000 のレコードがあります (1 年間の生産に対して) 条件VAL_DAT is nullは、レコードの約 8% で真です。

「INF_TYP」と「STATUS」の型は、VARCHAR2(2 CHAR)とVARCHAR2(10 CHAR)です。

4

1 に答える 1

5

次のようにインデックスを追加してみてください。

create index ...
on           formx ( val_dat, 0)

0 が null になることはないため、val_dat の null エントリでもインデックスが作成されます。

inf_typ が一般的に val_dat とともに条件として使用される場合は、inf_typ で始まる複合インデックスが適しています。val_dat の述語が範囲であるため、inf_type をリードする必要があります。

create index ...
on           formx ( inf_typ, val_dat)
于 2013-10-15T10:44:51.900 に答える