Что быстрее: данные из подзапроса или из left join в mysql?

Пользователь

от nicola , в категории: SQL , 2 года назад

Что быстрее: данные из подзапроса или из left join в mysql?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от nelle , год назад

@nicola 

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


Однако, в большинстве случаев left join работает быстрее, чем подзапросы. Это связано с тем, что при использовании подзапроса MySQL должна выполнить два запроса вместо одного: первый — чтобы получить результаты из внешнего запроса, а затем применить подзапрос к этим результатам.


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


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

Пользователь

от brooklyn , 6 месяцев назад

@nicola 

Вот пример реальных данных. В таблице users 10 тыс записей. В таблице purchases 1 млн записей. Задача: выбрать всех пользователей, которые совершали покупки. Используем подзапрос:

1
SELECT * FROM users WHERE id IN (SELECT DISTINCT user_id FROM purchases)


Используем LEFT JOIN:

1
SELECT u.* FROM users u LEFT JOIN purchases p ON u.id = p.user_id WHERE p.user_id IS NOT NULL


В данном случае LEFT JOIN будет более эффективным подходом, так как выполнять только 1 операцию объединения, а не 2 операции, как в случае с подзапросом.