好學驛站

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

          導航

          <2007年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案(8)

          文章分類(15)

          文章檔案(8)

          新聞檔案(2)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          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批量更新和刪除效率并非傳說中的那么差,只要優化的好,速度也非??臁?/p>


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


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


          網站導航:
           
          主站蜘蛛池模板: 沙坪坝区| 织金县| 宁陕县| 托克逊县| 陆丰市| 长兴县| 富顺县| 延庆县| 铁岭市| 寿光市| 方城县| 纳雍县| 金沙县| 筠连县| 白玉县| 上思县| 上饶市| 海安县| 普兰店市| 通化市| 含山县| 三江| 贡觉县| 茂名市| 新绛县| 丽水市| 太原市| 灌阳县| 金山区| 德江县| 宝山区| 当阳市| 天气| 天台县| 资兴市| 全州县| 宁南县| 雷波县| 固安县| 太保市| 宁河县|