我有一个按日期(按天)分区的表和字段上的本地索引(包括日期字段) . 如果我查询:
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 回答
由于您在日期字段上有索引,因此您应该以可以使用此索引的方式编写查询 . 这对于EXTRACT函数是不可能的,因为Oracle必须遍历所有数据并计算每行的条件以确定它是否匹配 .
如果您有特定日期或日期范围,则可以使用日期索引 . 在您的情况下,您正在寻找一系列日期 . 所以查询可以写成: