Присоединиться к запросу или подзапросу

StackOverflow https://stackoverflow.com/questions/658501

  •  20-08-2019
  •  | 
  •  

Вопрос

Существуют ли практические правила для разработчиков, когда использовать join вместо подзапроса, или они одинаковые.

Это было полезно?

Решение

Зависит от СУБД. Вы должны сравнить планы выполнения для обоих запросов.

По моему опыту работы с Oracle 10 и 11 планы выполнения всегда одинаковы.

Другие советы

Первый принцип: " точно сформулируйте запрос " ;. Вторым принципом является & Quot; просто и ясно сформулируйте запрос & Quot; (где вы обычно делаете выбор). Третий - & Quot; сформулируйте запрос, чтобы он эффективно обрабатывался & Quot;.

Если это база данных с хорошим обработчиком запросов, эквивалентные схемы запросов должны приводить к планам запросов, которые являются одинаковыми (или, по крайней мере, одинаково эффективными).

Больше всего меня огорчило использование MySQL в первый раз, насколько я был сознателен, чтобы предвидеть оптимизатор. После долгого опыта работы с Oracle, SQL Server, Informix и другими продуктами dbms я очень редко ожидал, что буду заниматься такими проблемами. Теперь лучше с новыми версиями MySQL, но мне все равно приходится уделять больше внимания, чем другим.

С точки зрения производительности, они не имеют никакой разницы в большинстве современных механизмов DB.

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

Если возможно, всегда старайтесь выполнять запросы JOIN и фильтровать их с помощью предложения ON вместо WHERE (хотя оно должно быть таким же, поскольку современные движки оптимизированы для этого).

Теоретически каждый подзапрос может быть изменен на запрос соединения.

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

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

береги себя, Alex

Давайте пока проигнорируем влияние на производительность (как и следовало бы, если бы мы знали, что " Преждевременная оптимизация - корень всех зол ").

Выберите то, что выглядит понятнее и проще в обслуживании.

В SQL Server коррелированный подзапрос обычно работает хуже, чем объединение, а часто даже лучше для производительности, соединение с производной таблицей. Я почти никогда не пишу подзапрос для чего-либо, что должно быть выполнено несколько раз. Это связано с тем, что коррелированные подзапросы часто превращают ваш запрос в курсор и запускают по одной строке за раз. В базах данных обычно лучше делать что-то на основе множеств

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top