Присоединиться к запросу или подзапросу
Вопрос
Существуют ли практические правила для разработчиков, когда использовать join вместо подзапроса, или они одинаковые.
Решение
Зависит от СУБД. Вы должны сравнить планы выполнения для обоих запросов. Р>
По моему опыту работы с Oracle 10 и 11 планы выполнения всегда одинаковы.
Другие советы
Первый принцип: " точно сформулируйте запрос " ;. Вторым принципом является & Quot; просто и ясно сформулируйте запрос & Quot; (где вы обычно делаете выбор). Третий - & Quot; сформулируйте запрос, чтобы он эффективно обрабатывался & Quot;.
Если это база данных с хорошим обработчиком запросов, эквивалентные схемы запросов должны приводить к планам запросов, которые являются одинаковыми (или, по крайней мере, одинаково эффективными).
Больше всего меня огорчило использование MySQL в первый раз, насколько я был сознателен, чтобы предвидеть оптимизатор. После долгого опыта работы с Oracle, SQL Server, Informix и другими продуктами dbms я очень редко ожидал, что буду заниматься такими проблемами. Теперь лучше с новыми версиями MySQL, но мне все равно приходится уделять больше внимания, чем другим.
С точки зрения производительности, они не имеют никакой разницы в большинстве современных механизмов DB.
Проблема с подзапросами заключается в том, что у вас может не быть поднабора результатов без какого-либо ключа, поэтому присоединение к ним будет более дорогим.
Если возможно, всегда старайтесь выполнять запросы JOIN и фильтровать их с помощью предложения ON вместо WHERE (хотя оно должно быть таким же, поскольку современные движки оптимизированы для этого).
Теоретически каждый подзапрос может быть изменен на запрос соединения.
Как и во многих вещах, это зависит. - насколько сложен подзапрос - в запросе, как часто выполняется подзапрос
Я стараюсь избегать подзапросов, когда могу. Особенно, когда ожидаются большие наборы результатов, никогда не используйте подзапросы - в случае, если подзапрос выполняется для каждого элемента набора результатов.
береги себя, Alex
Давайте пока проигнорируем влияние на производительность (как и следовало бы, если бы мы знали, что " Преждевременная оптимизация - корень всех зол ").
Выберите то, что выглядит понятнее и проще в обслуживании.
В SQL Server коррелированный подзапрос обычно работает хуже, чем объединение, а часто даже лучше для производительности, соединение с производной таблицей. Я почти никогда не пишу подзапрос для чего-либо, что должно быть выполнено несколько раз. Это связано с тем, что коррелированные подзапросы часто превращают ваш запрос в курсор и запускают по одной строке за раз. В базах данных обычно лучше делать что-то на основе множеств