`
tolys
  • 浏览: 115591 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Hibernate的批量删除的效率分析

阅读更多

Hibernate作为ORM,有一个ORM固有的问题,就是由于为了持久对象的同步,不能够使用批量删除和批量更新的sql,只能按照主键一条条来操作。因此效率相对JDBC来说是比较低的。然而事情也并不总是那么绝望,只要你对Hibernate进行优化,也可以得到相当满意的速度。

[code:1] session.delete("from Cat as c where ...");[/code:1]

该语句实际上发送sql:
[code:1]==> select id,name,sex,weight from cat;
==> delete from cat where id = ?[/code:1]

Hibernate先查询数据,确实要消耗一些时间,但是select只读操作和insert,delete,update这些数据库修改操作在速度上有一个以上的数量级的差距。所以 Hibernate虽然查询数据要多耗时,但是消耗的这点时间影响不是很大,主要是内存消耗的多。而delete的速度,我们知道调节Hibernate的Batch Size可以提供大大提高insert, delete和update的速度。

我的测试:

Oracle817,ojdbc14.jar 表记录1万条,全部删除。

JDBC:

sql语句 [code:1]delete from cat[/code:1]
速度:平均6s

Hibernate:

[code:1]session.delete("from Cat as c");[/code:1]

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

批量删除和批量更新建议用JDBC,这是一个原则,当然有的时候可能必须用Hibernate来批量更新和批量删除,那么这个时候我想说的就是,Hibernate批量更新和删除效率并非传说中的那么差,只要优化的好,速度也非常快。  

 

转载 http://www.iteye.com/topic/265

分享到:
评论
2 楼 tolys 2010-09-19  
问号当作一个参数,通过拼凑是可以的。
1 楼 yoin528 2010-09-17  
我想问一下,如果我想根据id批量删除,而id的数量是不确定的像'id1','id2','id3',在jdbc预编译框架(如:hibernate、jpa)里用String sql = delect from table where id in(?)只用一个问号能不能删除?

相关推荐

    hibernate批量删除

    ### Hibernate批量删除详解 #### 背景与概念 在Java开发中,处理大量数据时,经常需要执行批量操作,如批量更新或批量删除。这些操作对于提高应用程序性能至关重要,尤其是在涉及成千上万条记录的情况下。...

    在Hibernate中处理批量更新和批量删除

    本文将深入探讨在Hibernate中处理批量更新和批量删除的策略,以及如何优化这些操作,以提高数据库操作的效率。 ### 批量更新的常规方法 在Hibernate中,最直观的批量更新方式是通过循环遍历查询结果集,并对每个...

    hibernate批量删除.txt

    ### Hibernate 批量删除知识点详解 #### 一、概述 在进行数据库操作时,经常会遇到需要批量处理数据的情况,例如批量更新或批量删除等。利用Hibernate框架可以方便地实现这些功能,提高开发效率并减少资源消耗。...

    jsp Hibernate批量更新和批量删除处理代码

    ### Hibernate批量删除 批量删除操作与批量更新类似,也存在性能问题。在Hibernate中,批量删除操作同样需要先将所有需要删除的实体对象加载到内存中,再逐个从会话缓存中删除,最后将这些删除操作同步到数据库。 ...

    在Hibernate应用中处理批量更新和批量删除

    本文将深入探讨在Hibernate应用中处理批量更新和批量删除的最佳实践,以及如何避免常见的性能陷阱。 ### 一、批量更新的基本概念 批量更新是指对数据库中的多条记录进行一次性更新操作,相较于单条记录更新,批量...

    jsp Hibernate批量更新和批量删除处理代码.docx

    本文件主要探讨了如何使用Hibernate进行批量更新和批量删除处理,这些操作在处理大量数据时尤其重要,因为它们可以显著提高应用的性能。下面我们将深入解析这两个主题。 批量更新在Hibernate中通常涉及在一个事务中...

    hibernate效率问题

    hibernate效率注意的几个问题,批量删除和批量更新建议用JDBC,这是一个原则,当然有的时候可能必须用Hibernate来批量更新和批量删除,那么这个时候我想说的就是,Hibernate批量更新和删除效率并非传说中的那么差,...

    Hibernate批量处理

    ### Hibernate批量处理详解 #### 一、批量处理概述 Hibernate作为一种强大的对象关系映射(ORM)框架,提供了多种批量处理的方式以提高数据处理效率。批量处理对于需要在短时间内处理大量数据的应用尤其重要,如...

    Hibernate批量更新与删除实例浅析

    批量删除的处理类似,但由于Hibernate的默认实现是一个接一个地删除,效率较低。对于大量数据的删除,建议使用JDBC的`DELETE`语句或者使用数据库级别的批量删除功能。需要注意的是,直接执行`DELETE`语句可能会导致...

    hibernateTemplate批量删除数据

    对于批量删除数据,`HibernateTemplate`提供了`bulkUpdate()`方法,该方法通过执行SQL语句或HQL(Hibernate查询语言)来高效地处理大量数据的删除操作,避免了逐条删除所带来的性能瓶颈。 ### 批量删除操作详解 在...

    ssh整合的分页、批量删除

    下面将详细介绍SSH整合在分页和批量删除功能上的实现。 一、SSH整合中的分页 在大型系统中,为了提高用户体验和性能,通常需要对数据进行分页显示。在SSH框架中,分页主要由Struts和Hibernate协同完成。 1. **...

    hibernate批量操作实例详解

    【hibernate批量操作实例详解】 批量操作是提高数据库处理效率的重要手段,特别是在处理大量数据时,能够显著提升性能并减少资源消耗。在Hibernate中,批量操作主要包括批量插入、批量更新和批量删除。以下是对这些...

    ssh中用到的批量删除

    在这个案例中,批量删除功能被应用于Struts Action层、Spring Service层、Spring DAO层以及Hibernate数据持久化层。 #### 1.1 DAO层设计 - **接口定义**:`public void deleteAll(List list);` - 这个接口定义了...

    struts2 的批量删除功能完整例子

    在Web开发中,批量删除功能是一项常见的需求,它允许用户一次性删除多个记录,提高操作效率。下面我们将深入探讨如何在Struts2框架下实现批量删除功能,并结合提供的文件名进行分析。 首先,我们来看`AddLog.java`...

    Hibernate管理Session和批量操作分析

    2. **通过HQL(Hibernate Query Language)**:利用HQL语句实现批量操作,比如更新或删除,可以避免加载整个对象到内存。 3. **通过StatelessSession**:StatelessSession不维护任何持久化状态,没有一级缓存,适合...

    Hibernate-extensions 完整安装包

    Hibernate-Extensions能够自动记录和打印执行的SQL语句,这对于调试和性能分析非常有帮助。开发者可以通过配置开启或关闭这一功能,以便在需要时查看SQL详情,找出潜在的性能瓶颈。 四、时间戳更新 在数据库操作中...

    浅析Hibernate下数据批量处理方法.doc

    标题"浅析Hibernate下数据批量处理方法"和描述中提到,早期的Hibernate在批量插入时可能存在效率问题,但最新版本已经进行了优化,例如通过设置`batch_size`参数来提高批量处理的性能。`batch_size`设置的是JDBC...

    Hibernate框架jia包

    - 批量操作:利用批处理更新或删除,减少数据库交互次数。 -延迟加载(Lazy Loading):只在需要时加载关联对象,避免数据冗余。 8. **HQL和Criteria API**: HQL是面向对象的查询语言,类似于SQL但更接近Java。...

    HQL批量插入、更新和删除

    - **批量删除**:对于批量删除操作,可以使用HQL的`DELETE`语句。例如,要删除所有状态为“无效”的用户记录,可以执行如下HQL语句: ```java String hql = "DELETE User WHERE status = :status"; Query query =...

Global site tag (gtag.js) - Google Analytics