Hibernate的批量刪除的效率分析
Hibernate作為ORM,有一個ORM固有的問題,就是由于為了持久對象的同步,不能夠使用批量刪除和批量更新的sql,只能按照主鍵一條條來操作。因此效率相對JDBC來說是比較低的。然而事情也并不總是那么絕望,只要你對Hibernate進行優化,也可以得到相當滿意的速度。
代碼
該語句實際上發送sql: 代碼
Hibernate先查詢數據,確實要消耗一些時間,但是select只讀操作和insert,delete,update這些數據庫修改操作在速度上有一個以上的數量級的差距。所以 Hibernate雖然查詢數據要多耗時,但是消耗的這點時間影響不是很大,主要是內存消耗的多。而delete的速度,我們知道調節Hibernate的Batch Size可以提供大大提高insert, delete和update的速度。 我的測試: Oracle817,ojdbc14.jar 表記錄1萬條,全部刪除。 JDBC: sql語句 代碼
速度:平均6s Hibernate: 代碼
Batch Size = 0 速度: 25s 批量刪除和批量更新建議用JDBC,這是一個原則,當然有的時候可能必須用Hibernate來批量更新和批量刪除,那么這個時候我想說的就是,Hibernate批量更新和刪除效率并非傳說中的那么差,只要優化的好,速度也非常快。 |