performance - 如何优化分区表的oracle查询?

标签 performance oracle oracle10g partitioning date-arithmetic

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

SELECT * FROM table t WHERE t.fdate = '30.06.2011'

它很快就实现了,但是当我制作时

SELECT * FROM table t WHERE EXTRACT(month from t.fdate) = 6 AND EXTRACT(year from t.fdate) = 2011

大约需要 200 秒完成。

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

最佳答案

由于您在日期字段上有索引,因此您应该以可以使用该索引的方式编写查询。这对于 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');

关于performance - 如何优化分区表的oracle查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089410/

相关文章:

sql - 对单个表中具有不同状态代码的记录进行计数

oracle - 在Oracle中查找用户访问过的表

mysql - 我可以使用驼峰式别名来命名 SQL 的结果列吗?

database - TPC-C、TPC-E 和 TPC-H 基准测试有什么区别?

java - 归并排序还是数据库?

java - Java 中 "x==7"到 1(真)或 0(假)的快速恒定时间评估

oracle - 有什么方法可以对 Oracle 触发器进行逆向工程或对其进行反编译?

performance - TSQL : Which real number type results in faster comparisons

sql - Oracle 数据库中 IGNORE_DUP_KEY 的使用(sqlplus)

sql - 日期和季度 SQL ORACLE