【Fenng 】JDBC 的 setTimestamp 效能問題

idba發表於2008-06-21

偶然發現三年前的一個技術問題。當時比較匆忙,避免掉即過去了。現在 Metalink 上其實已經把這個問題作為一個 Bug 處理了。

問題描述:通過 JDBC 上來的 Java 查詢應用,SQL 表現異常。表欄位使用了 DATE 型別,針對該欄位時間區域很小的範圍查詢(預期應該是走 INDEX RANGE SCAN),在 SQL Map 上指定索引,發現無效。仍然是 FULL TABLE SCAN 。

罪魁禍首:setTimestamp() 把值繫結為 TIMESTAMP 型別,這樣和 DATA 型別比較的時候,CBO 就會選擇全表掃描。

通過 Trace 能觀察到該異常行為。TIMESTAMP 在 Oracle 的 JDBC 9.2.0.1 上就有了,連續幾個版本其實都有類似的問題。

解決辦法:使用 setString() 而不是 setTimestamp() 方法。

這個故事告訴我們,JDBC 其實問題挺多的。同樣,TIMESTAMP 潛在的問題也不少。

--EOF-

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-353128/,如需轉載,請註明出處,否則將追究法律責任。

相關文章