我有这样的查询:
String sql = "DELETE FROM " + table.getName().quoted() + " WHERE modificationTime < ? AND ROWNUM < " + (objectsPerCommit + 1);
PreparedStatement statement = connection.prepareStatement(sql);
statement.setObject(1, ...timestamp_value..., ...timestamp_type...);
boolean result = statement.execute();
...
statement.close();
所以我执行的SQL主要是:
DELETE
FROM
mytable
WHERE
modificationTime < to_date('2014-06-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND ROWNUM <= 10000;
此查询运行非常慢,因为它没有使用现有的组合索引而不是modifyTime和其他两列。而是进行全表扫描。 如果我强制使用带有提示的索引,如下所示,一切都顺利进行。
DELETE /*+ index(mytable PK_MYTABLE) */
FROM
mytable
WHERE
modificationTime < to_date('2014-06-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND ROWNUM <= 10000;
我的问题是:这是否适用于OJDBC?我可以简单地将代码更改为:
String sql = "DELETE /*+ index(mytable PK_MYTABLE) */ FROM " + table.getName().quoted() + " WHERE modificationTime < ? AND ROWNUM < " + (objectsPerCommit + 1);
...
一切都按预期工作?或者OJDBC会以某种方式放弃评论/提示吗?
答案 0 :(得分:1)