好學驛站

          JSP、JAVA、struts、hibernate、spring、eclipse、工作流、電子政務、協同辦公、J2ME

          Hibernate的批量刪除的效率分析

          Hibernate作為ORM,有一個ORM固有的問題,就是由于為了持久對象的同步,不能夠使用批量刪除和批量更新的sql,只能按照主鍵一條條來操作。因此效率相對JDBC來說是比較低的。然而事情也并不總是那么絕望,只要你對Hibernate進行優化,也可以得到相當滿意的速度。

          代碼
          1. session.delete( "from?Cat?as?c?where?..." );??

          該語句實際上發送sql:

          代碼
          1. ==>?select?id,name,sex,weight?from?cat; ??
          2. ==>?delete?from?cat?where?id?=????

          Hibernate先查詢數據,確實要消耗一些時間,但是select只讀操作和insert,delete,update這些數據庫修改操作在速度上有一個以上的數量級的差距。所以 Hibernate雖然查詢數據要多耗時,但是消耗的這點時間影響不是很大,主要是內存消耗的多。而delete的速度,我們知道調節Hibernate的Batch Size可以提供大大提高insert, delete和update的速度。

          我的測試:

          Oracle817,ojdbc14.jar 表記錄1萬條,全部刪除。

          JDBC:

          sql語句

          代碼
          1. delete?from?cat??

          速度:平均6s

          Hibernate:

          代碼
          1. session.delete("from?Cat?as?c");??

          Batch Size = 0 速度: 25s
          Batch Size = 50 速度: 6s

          批量刪除和批量更新建議用JDBC,這是一個原則,當然有的時候可能必須用Hibernate來批量更新和批量刪除,那么這個時候我想說的就是,Hibernate批量更新和刪除效率并非傳說中的那么差,只要優化的好,速度也非常快。


          posted on 2007-06-13 10:55 好學蜘蛛 閱讀(258) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 天台县| 灯塔市| 长寿区| 彩票| 卓尼县| 周宁县| 孙吴县| 惠安县| 余庆县| 贺兰县| 花莲县| 金山区| 桐城市| 定安县| 凤山县| 西华县| 吉安县| 枣阳市| 如东县| 泽州县| 都兰县| 宁明县| 合肥市| 万山特区| 尖扎县| 祁门县| 石棉县| 明水县| 大竹县| 沽源县| 平原县| 板桥市| 滕州市| 墨脱县| 化德县| 昆山市| 安远县| 云霄县| 遂川县| 明溪县| 富阳市|