Hibernate или SQL для удаления? - PullRequest
       5

Hibernate или SQL для удаления?

1 голос
/ 23 февраля 2012

Мне нужно удалить записи из таблицы на основе ключа, и эти записи могут составить около 5 миллионов. Есть два способа сделать это. Один использует Hibernate, а другой - прямым SQL-запросом.

Hibernate:

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 Ответ

2 голосов
/ 23 февраля 2012

Второй, безусловно, будет быстрее со значительной разницей, потому что в первом вы выполняете запрос для каждого удаления, а во втором вы отправляете только один запрос, а остальные СУБД обрабатывает остальные.

Вы можете выполнить вторую через Hibernate, HSQL.

Edit: Кстати, если вы выполняете запрос «УДАЛИТЬ ОТ» для каждого идентификатора, он будет работать почти так же медленно, как и первый, за исключением того, что вы не будете перебирать целые записи сотрудников, что лучше :) Используйте оператор SQL IN ()

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

Постарайтесь свести к минимуму количество выполнений SQL-запросов, а затем, если вы все еще не удовлетворены производительностью, попробуйте повысить производительность за счет улучшения самого запроса, а не части программирования.

...