1
我有這樣的查詢:不OJDBC支持Oracle提示準備語句中
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;
這個查詢運行非常非常慢,因爲它沒有使用現有的組合索引over修改時間和其他兩列。相反,它會執行全表掃描。 如果我強制使用帶有提示的索引,如下所示,一切運行順利。
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會以某種方式刪除評論/提示?
只是嘗試 - 什麼問題? –
我認爲OP想知道它是否會起作用,或者將被準備好的聲明視爲簡單的評論。 –
'提示'是數據庫特定的。另外,'/ * + * /'用雙引號括起來,所以客戶端不會忽略它。但對於_bind_變量,_no_部分'SQL'可能會被客戶端潤飾。 –