【发布时间】:2014-06-09 08:34:16
【问题描述】:
您好,我们有很大的 Oracle 列对象,我们已使用 DATE
的 数据类型 对其进行分区其中一个分区如下所示:
GCP_P1 TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') 83 M_DATA01 DISABLED 348132 15214 146 08.06.2014 02:20:40 1078 0
每个分区为一周。
我们通过带有 jdbc 的瘦客户端运行我们的 sql。没有 ORM,只有纯 jdbc。
当分区列的谓词项是 java.sql.timestamp 时,我们意识到查询不会从分区中受益。但是,当它是 java.sql.date 类型时,执行计划显示成功的分区访问。
例如,我们的 sql 看起来像这样:
SELECT COUNT(1) FROM ATABLE WHERE PARTITIONED_COLUMN > ?
当我们的java语句是:
preparedStatement.setDate(...); // it benefits from partition
但是当它是这样的时候:
preparedStatement.setTimestamp(...); //it does not benefits from partition
我正在从蟾蜍那里寻找它们。我有经验,当它是java.sql.date时,它在oracle上被解释为DATE,当它是java.sql.timestamp时它被解释为TIMESTAMP
我正在使用以下 sql 语句跟踪捕获的 jdbc 日期类型
SELECT *
FROM V$SQL_BIND_CAPTURE
WHERE WAS_CAPTURED = 'YES' AND LAST_CAPTURED BETWEEN SYSDATE-1/50 AND SYSDATE
ORDER BY LAST_CAPTURED DESC;
我的问题是你遇到过这样的问题吗?如果是这样,你会指导我看一些文件吗?
【问题讨论】:
标签: java sql oracle jdbc database-partitioning