JDBC 的 setTimestamp 效能問題

來源:互聯網
上載者:User
作者: Fenng | 可以轉載, 轉載時務必以超連結形式標明文章原始出處和作者資訊及著作權聲明
網址: http://www.dbanotes.net/database/jdbc_settimestamp_performance.html

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

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

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

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

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

這個故事告訴我們,Oracle 的 JDBC 驅動程式其實問題挺多的。同樣,TIMESTAMP 潛在的問題也不少,儘管這個資料類型已經出現多時。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.