2014-11-16 3 views
0

По сообщениям спящего режима Docязыкового спящий режим запроса является более эффективным

от Cat, как кошка, где cat.id = 123

от Cat, как кошка, где cat.mate.id = 69

Второго запрос эффективен и не требует подключения к таблице.

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

ответ

0

Это примеры SQL, которые будут генерироваться с вашего HQL

Первый (from Cat as cat where cat.id = 123):

select c.* from Cat c where c.id=123; 
// no joins - OK 

Второй (from Cat as cat where cat.mate.id = 69):

select c.* from Cat c where c.mate_id=69; 
// no joins (because cat.mate.id is the identifier in Mate) 
// that's why it's efficient 

Если у вас это HQL: "from Cat as cat where cat.mate.name = 'mate'" SQL будет выглядеть так:

select c.* from Cat c join Mate m on c.mate_id = m.id where m.name='mate'; 

c.mate_id является ключом, который откладывать это на потом ссылки на штурманскую id колонки

+0

@ user872487 Оба запроса НЕ требует соединение. Пожалуйста, внимательно посмотрите на мой ответ. И в документации не указано, что второй запрос более эффективен, он говорит, что второй запрос эффективен, так как он не требует соединения. – Multisync

+0

@ user872487 И первый запрос более эффективен, поскольку вы выполняете поиск по первичному ключу и возвращает только одну строку (или ноль). Во втором запросе, который вы ищете по внешнему ключу, запрос может возвращать более одного ряда. Но вам не нужно соединение, потому что в таблице Cat достаточно информации для получения результата. – Multisync

+0

Спасибо Multisync. – Nishat

Смежные вопросы