我们有一个名为 的表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"
)
这个确切的表(具有相同的数据)存在于两台服务器上,唯一的区别是每台服务器上安装的 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 上执行不到一秒,在 Oracle 9 上执行大约一分钟。
我们错过了什么吗?
编辑:
Oracle 9 的执行计划:
Oracle 10 的执行计划: