2013-07-09 2 views
0

Какое из следующих запросов HQL быстрее вычисляется, то есть более эффективно?Какая операция Hibernate Join более эффективна?

from Cat as cat 
left join cat.kittens as kitten 
with kitten.bodyWeight > 10.0 

или

from Cat as cat 
left join cat.kittens as kitten 
where 
    kitten.bodyWeight > 10.0 
+2

Он производит разные результаты. Первый запрос вернет всех кошек. –

+0

В чем разница? – confile

+0

Первый возвращает всех кошек, потому что 'with' во внешнем соединении не уменьшает набор результатов. Второй запрос возвращает всех кошек с хотя бы одним котенком, который тяжелее 10. –

ответ

0

Выполнение запросов HQL зависят от основной базы данных. HQL переводится на SQL с помощью hibernate. SQL переводится в план выполнения и оптимизируется СУБД. Оптимизация и производительность зависят также от данных в вашей базе данных.

Посмотрите на сгенерированный SQL и проанализируйте его. Вы можете взглянуть на план выполнения, сгенерированный СУБД. Все это не зависит от спящего режима.

Ваши запросы не могут сравниться, они не дают одинаковых результатов. Как правило, левые внешние соединения медленнее, чем внутренние соединения.

+0

В чем разница в результатах? Как я могу увидеть sql, который сгенерирован? – confile

+0

@confile Используйте 'logSql = true' в' DataSource.groovy', чтобы увидеть сгенерированный SQL. – dmahapatro

+0

См. Http://stackoverflow.com/questions/1710476/print-query-string-in-hibernate-with-parameter-values –