2015-05-03 1 views
1

Вопрос 1: относительно производительности, который является лучшим: подзапросы или JOINs?Производительность по подзапросам и JOINS?

Вопрос 2: Есть ли способ измерить и сравнить время выполнения подзапроса или JOIN?

Редактировать

Я немного запутался, хотя и меньше, чем раньше. Я нашел это http://www.akadia.com/services/sqlsrv_subqueries.html

Это довольно хорошо обернуто в сочетании с ответами ниже.

+2

http://stackoverflow.com/questions/2577174/join-vs-sub-query – sqluser

+0

первый ответ: Почему вы не просто попробовать это сами? 2-й ответ: [Да, есть.] (Http://bit.ly/1DW0NDC) –

+2

Третий ответ: сначала сосредоточьтесь на том, что вам действительно нужно. Иногда вам приходится использовать коррелированный подзапрос, и соединение не будет выполнено. В этом случае производительность не имеет значения. – siride

ответ

0

Существует много мнений о JOINs vs Subqueries.

У Криса Лондона отличная статья на эту тему.

Похоже, что приговор заключается в выполнении подзапросов. Причина того, что подзапрос в соединении быстрее, чем подзапрос в предложении where , я полагаю, потому что, когда он находится в том месте, где он должен запускать это условие для каждой строки, тогда как ему нужно только один раз запустить его для подзапрос/присоединиться. Как я уже говорил, разные РСУБД обрабатывают вещи по-разному, но даже если ваша СУРБД не обрабатывает подзапросы, а также другие, для меня они более читабельны. Итак, теперь я рекомендую подзапросы!

Источник: http://www.chrislondon.co/joins-vs-subqueries/

1

подзапросов против JOIN и

JOIN и, как правило, быстрее, предполагая, что поля, на которых JOIN выполняется индексируются. Подзапросы могут быть полезны для извлечения очень маленького подмножества на основе индекса и присоединения к основной таблице. По моему опыту, JOINs были превосходными по производительности. Различные базы данных могут оптимизировать JOIN и подзапросы по-разному. Вы можете получать разные результаты в SQL Server и MySQL (и их разных версиях). Таким образом, измерение/оценка производительности имеет важное значение, что приводит нас к следующему вопросу

время измерения/оценки

Я предпочитаю делать EXPLAIN и EXPLAIN EXTENDED на запрос с JOIN и суб-запрос, чтобы получить представление о том, как DB (предполагая, MySQL) использует индексы. Запустите запросы к текущему набору данных, а затем создайте более крупный набор данных в 3 раза по сравнению с текущим и запустите с ними запросы в непроизводственной системе. Это даст вам количество секунд, которые должен выполнить запрос.

На SQL Server, когда вы объясните, вы увидите номера затрат. Вы можете сравнить их для запроса запроса JOIN или запроса запроса, а затем выполнить прогон с зависающим набором данных и набором данных в 3-5 раз (или 10 раз) больше, чем текущий, чтобы увидеть, как ваши запросы выполняются.

+1

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

1

В наши дни РСУБД имеют довольно умные и мощные оптимизаторы. Они автоматически решат между JOIN и подзапросами, независимо от вашего точного кода. Не начинайте ручную оптимизацию, пока не столкнетесь с проблемами производительности.

1

Нет общего ответа. Это зависит от используемой платформы (Microsoft SQL Server, Oracle, MySQL и т. Д.), А также от запроса.

Как пояснили PM 77-1, оптимизаторы в наши дни довольно хорошо разбираются в реляционной алгебре запроса с наиболее эффективным планом выполнения. Но каждый сервер и каждый запрос отличаются друг от друга. В SQL Server вы можете посмотреть план «Предполагаемый план выполнения», чтобы сравнить различные запросы и посмотреть, как оптимизатор решит его выполнить. Большинство платформ имеют аналогичную концепцию, такую ​​как EXPLAIN.

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

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