用于删除操作的Hibernate或SQL?

时间:2012-02-23 13:03:28

标签: java sql hibernate sql-delete

我需要根据密钥从表中删除条目,这些条目可能会达到500万左右。有两种方法可以解决它。一个使用Hibernate,另一个使用直接SQL查询。

休眠:

List<Employee> empList = 
            getHibernateTemplate()
            .findByNamedParam("from Employee emp where emp.Id=:empId","empId",employeeId);


        Iterator<Employee> empIter = empList .iterator();

        while(empIter.hasNext()) {
            Employee empTran = empIter.next();
            getHibernateTemplate().delete("Employee", empTran);

SQL:

delete from Employee where Id = employeeId";

两者中的哪一个会让结果更快? Hibernate查询可以进一步调整吗?

(请忽略语法错误,如果有的话)

1 个答案:

答案 0 :(得分:2)

第二个肯定会更快,但有显着差异,因为在第一个中你为每个删除执行一个查询,但在第二个中你只发送一个查询,你的DBMS处理其余的。

你可以通过Hibernate,HSQL执行第二个。

编辑: 顺便说一句,如果你为每个ID运行你的“DELETE FROM”查询,那么它几乎就像第一个一样慢,除了你不会迭代整个Employee记录,这更好:) 使用SQL的IN()运算符

"delete from Employee where Id IN(3,5,8,...);"
"delete from Employee where Id IN(SELECT Id FROM table...);"

尝试最小化SQL查询执行,如果您对性能仍不满意,请尝试通过改进查询本身而不是编程部分来提高性能。