t_reading
次のスキーマを持つ というテーブルがあります。
MEAS_ASS_ID NUMBER(12,0)
READ_DATE DATE
READ_TIME VARCHAR2(5 BYTE)
NUMERIC_VAL NUMBER
CHANGE_REASON VARCHAR2(240 BYTE)
OLD_IND NUMBER(1,0)
この表は、次のように索引付けされています。
CREATE INDEX RED_X4 ON T_READING
(
"OLD_IND",
"READ_DATE" DESC,
"MEAS_ASS_ID",
"READ_TIME"
)
この正確なテーブル (同じデータを持つ) は 2 つのサーバーに存在します。唯一の違いは、それぞれにインストールされている Oracle のバージョンです。
問題のクエリは次のとおりです。
SELECT * FROM t_reading WHERE OLD_IND = 0 AND MEAS_ASS_ID IN (5022, 5003) AND read_date BETWEEN to_date('30/10/2012', 'dd/mm/yyyy') AND to_date('31/10/2012', 'dd/mm/yyyy');
このクエリは、Oracle 10 では 1 秒未満で実行され、Oracle 9 では約 1 分で実行されます。
何か不足していますか?
編集:
Oracle 9 の実行計画:
Oracle 10 の実行計画: