Проблемы производительности Hibernate с запросами на соединение - PullRequest
0 голосов
/ 28 января 2012

Мы используем динамический генератор запросов HQL, который генерирует запрос, как показано ниже:

select sum(en1.amount) from SampleEntity1 as en1 where en1.child.name = ?    

Hibernate преобразует вышеуказанный запрос в sql следующим образом:

select sum(tbl1.c_amount)  from sampletable1 as tbl1, samplechild as child1 where tbl1.c_child = child1.c_id and child1.c_name = ?

Таблицы sampletable1 и samplechild имеют более 1 миллиона записей, и поскольку сгенерированный sql имеет перекрестное соединение, производительность запроса очень низкая и он страдает от большого количества операций ввода-вывода базы данных. Но если мы запустим sql с использованием внутреннего соединения, запрос будет выполняться с гораздо лучшей производительностью.

Есть ли способ заставить hibernate преобразовать такие запросы HQL во внутреннее соединение вместо перекрестного?

1 Ответ

0 голосов
/ 28 января 2012

Это внутреннее соединение, но оно не использует синтаксис внутреннего соединения.Если вы хотите использовать синтаксис внутреннего соединения, используйте внутреннее соединение, как описано в справочном руководстве Hibernate :

select sum(en1.amount) from SampleEntity1 as en1 
inner join en1.child child
where child.name = ?   

Я удивлен, что оба запроса не выполняются вв то же время.Они эквивалентны и должны использовать те же индексы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...