歡迎光臨
每天分享高質量文章

JDBC 效能小貼

(點選上方公眾號,可快速關註)


來源:ImportNew – 劉志軍

本文收集了一些用於提升JDBC效能的方法。Java應用或者JavaEE Web應用的效能是很重要的,尤其是資料庫後端對應用的效能影響。不知你是否經歷過Java、JavaEE web應用非常慢的案例沒有(處理一個簡單的請求都要花上好幾秒的時間用於資料庫訪問,分頁、排序等)。下麵這些貼士也許能提升Java應用的效能。它們非常簡單同時還可以應用於其它程式語言,如果是用資料庫作為後端儲存的話。

這幾個JDBC效能貼示不見得有多酷或者有些你從沒聽說過,雖然講的很基礎但是在實踐中上很多程式員經常忽略它們,當然你可能把標題稱為資料庫效能提示。

JDBC效能貼士一:使用快取

查出應用中有 多少資料庫呼叫 ,然後把它們減到最少,不管你信不信效能問題大多數情況下罪魁禍首是訪問資料庫的那些程式碼。因為連線到資料庫需要準備好連線(connections),還有往返的網路傳輸和資料庫系統後端的處理。如果你可以把資料快取下來的話這是減少資料庫呼叫最好的方式,即使你的應用有完全動態的資料,短暫的快取可以節省很大的資料苦往返的傳輸。加速Java應用後至少能減少20-50%的資料庫呼叫,如果想找出資料庫呼叫,那麼僅僅把DAO層的每個db呼叫中記錄到日誌中就行,如果記錄好每個執行緒進入和退出資料庫訪問的時間更好,它能告訴你一個呼叫究竟花了多少時間。

JDBC效能貼士二:使用資料庫索引

檢查資料庫列上(columns)是否有索引,如果你正做查詢發現所花的時間比預想的要長,那麼首先想到的是檢查在列上(正在查詢的where子句中的那列)是否做了索引。程式員中常犯這個錯誤,有索引和沒有索引在做查詢時有巨大的差異。這條貼士在效能上至少能提速100%,當然合適的索引更重要,太多的索引反而會減慢資料的插入和更新操作。因此使用索引的時候要小心,象id、類別(category)、類(class)等欄位上做索引是經常使用的。

JDBC效能貼士三:使用PreparedStatement

使用PreparedStatement或者儲存過程(Stored Procedure)執行查詢時PreparedStatement(預處理陳述句)比普通的Statement物件要快。因為資料庫可以對查詢陳述句做預處理何查詢快取計劃。 因此總是使用 ** 引數化形式的預處理陳述句** 如SELECT * FROM table WHERE id=?,而不要使用SELECT * FROM table WHERE id='”+id “‘,雖然後者仍是一個預處理陳述句但不是引數化的。使用第二種查詢方式在效能上沒有任何優勢,更多參考可以查下看JDBC為什麼要使用PreparedStatement而不是Statement

http://www.importnew.com/5006.html

JDBC效能貼士四:使用資料庫連線池

連線池用來存放資料庫連線(Connection),建立資料庫連線是個比較慢的過程而且會耗很長時間。所以如果每個請求都要建立一個連線,那麼顯然響應時間將會更長。用連線池根據上游的流量及併發請求數建立適當數量的連線。即使連線池在開始的請求中建立連線、快取連線會比較慢,但總體還是能減不少開銷。

JDBC效能貼士五:使用JDBC批次更新

使用JDBC批次更新操作能顯著提升Java資料庫應用的效能。你應該始終用批次處理來執行插入和更新操作。透過使用Statment或者PreparedStatement做批次查詢。用executeBatch()方法做批次查詢。

JDBC效能貼士六:取消自動提交

查詢時設定setAutoCommit(false),預設JDBC連線自動提交樣式是開啟的,意味著每個獨立的SQL陳述句都將在自己的事務中執行。然而你可以把SQL陳述句按組歸到一個邏輯事務中去,這樣透過呼叫commit()或rollback()要麼提交要麼回滾。試著執行相同數量的查詢次數對比一下使用自動提交和不使用自動提交時的效能區別有多大的差異性。

這些Java資料庫應用效能小提示看起來非常簡單,很多高階Java程式員能熟練運用在生產級程式碼中,但我還看到很多Java程式員並沒有在乎這些,直到他們發現Java應用變得很慢時。所以對於新手來說有必要記住它使用它。同時你還可以使用這些Java效能小提示作為程式碼審查機制的一個參考,在你寫的Java應用是使用資料庫作為後端儲存的時候。

看完本文有收穫?請轉發分享給更多人

關註「ImportNew」,提升Java技能

贊(0)

分享創造快樂