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

时间:2011-08-17 07:48:18

标签: performance oracle oracle10g partitioning 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(从日期开始)?

1 个答案:

答案 0 :(得分: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');