首页 文章

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

提问于
浏览
2

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

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 回答

  • 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');
    

相关问题