Могу ли я получить более высокую производительность, используя JOIN или EXISTS? - PullRequest
26 голосов
/ 22 октября 2008

У меня есть две таблицы «Учреждения и результаты», и я хочу посмотреть, есть ли какие-либо результаты для учреждений, чтобы я мог исключить те, которые не дали результатов.

Могу ли я получить более высокую производительность, используя JOIN или EXISTS?

Спасибо,
-Nimesh

Ответы [ 12 ]

0 голосов
/ 22 октября 2008

Если вы хотите, чтобы учреждения, у которых не было результатов, то подзапрос «Где не существует» будет быстрее, так как он остановится, как только найдет один результат для тех, у кого есть результаты ...

Если вы хотите, чтобы учреждения имели результаты, но на самом деле вы не хотите результатов, то же самое. Используйте подзапрос «Где существует». Он остановится, как только найдет один результат ... Это также гарантирует, что в наборе результатов будет только одна запись на учреждение, тогда как если у вас было учреждение с несколькими результатами, используя Подход соединения требует, чтобы вы добавили ключевое слово «Different» или предложение «Group By», чтобы исключить дубликаты строк продукта Cartesion, которые могли бы быть вызваны из нескольких записей Result, соответствующих одному учреждению.

Если вам нужны результаты, тогда выполните СОЕДИНЕНИЕ - Внутреннее объединение, если вы не хотите видеть учреждения без результатов, и внешнее объединение, если вы хотите видеть ВСЕ учреждения, в том числе без результатов.

0 голосов
/ 22 октября 2008

Если вы имеете в виду использование левого (или правого) внешнего соединения или подзапроса несуществующего, я вполне уверен, что левое внешнее соединение выигрывает в производительности. Например:

SELECT t1.* FROM table1 t1 LEFT OUTER JOIN table2 t2 ON t1.id = t2.id WHERE t2.id IS NULL

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

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