好學驛站

          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 好學蜘蛛 閱讀(255) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 兰考县| 房产| 洪洞县| 兴宁市| 南澳县| 尉氏县| 赤峰市| 郓城县| 图木舒克市| 平凉市| 连南| 苏尼特右旗| 瑞丽市| 建水县| 图木舒克市| 南涧| 开远市| 罗田县| 潮州市| 临朐县| 依安县| 红河县| 丹江口市| 延寿县| 永胜县| 华安县| 酉阳| 新余市| 保德县| 阿克陶县| 鹤峰县| 元氏县| 连平县| 江城| 赣榆县| 丹江口市| 邛崃市| 张掖市| 卢龙县| 曲阳县| 琼中|