如何从分区表优化oracle查询?

Dmi*_*ryB 2 oracle performance partitioning oracle10g date-arithmetic

我有一个按日期(按天)分区的表和字段上的本地索引(包括日期字段).如果我查询:

SELECT*FROM table t WHERE t.fdate = '30 .06.2011'

它很快实现了,但是当我做的时候

SELECT*FROM table t WHERE EXTRACT(来自t.fdate的月份)= 6 AND EXTRACT(来自t.fdate的年份)= 2011

它完成大约200秒.

如何优化此查询?可能我需要在EXTRACT(从日期开始的月份)和EXTRACT(从日期开始)创建本地索引?

Cod*_*odo 6

由于您在日期字段上有索引,因此您应该以可以使用此索引的方式编写查询.这对于EXTRACT函数是不可能的,因为Oracle必须遍历所有数据并计算每行的条件以确定它是否匹配.

如果您有特定日期或日期范围,则可以使用日期索引.在您的情况下,您正在寻找一系列日期.所以查询可以写成:

SELECT * FROM TABLE T
WHERE T.FDATE BETWEEN TO_DATE('1.6.2011', 'DD.MM.YYYY') AND TO_DATE('30.6.2011', 'DD.MM.YYYY');
Run Code Online (Sandbox Code Playgroud)