當前位置:
首頁 > 知識 > JDBC 性能小貼

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技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ImportNew 的精彩文章:

SpringMVC 開發 — 使用 Swagger 搭建介面請求頁面
深入分析 ThreadLocal 內存泄漏問題

TAG:ImportNew |