@KirillMilano

Какова эффективность сортировки и фильтрафии по JOIN полям в MySQL / MariaDB?

Здравствуйте, у меня следующий вопрос. Имеется SELECT запрос на одну главную таблицу и JOIN полей из дополнительной таблицы. Пример:

SELECT m.id, m.name, m.user_id, extra.published, extra.time FROM `main_table` as m JOIN `extra_table` as extra on m.id=extra.id WHERE extra.pubslished=1 AND  m.user_id=100 ORDER by extra.time DESC


Вопрос в следующем. Имеется ли разница по скорости выполнения запроса между таким запросом с фильтрацией по заджоининому полю, и запросом:

SELECT m.id, m.name, m.user_id, m.published, m.time FROM `main_table` as m WHERE m.pubslished=1 AND  m.user_id=100 ORDER by m.time DESC


Если да, то насколько существенно? И каком тип JOIN лучше применять в подобных запросах?
  • Вопрос задан
  • 2627 просмотров
Решения вопроса 1
В общем случае JOIN будет медленнее, поскольку ему приходится объединять две выборки, однако сейчас такие операции хорошо оптимизированы, и разница может быть незначительна. Также это зависит от правильности индексов и объёма данных. Лучше смотреть на удобство использования, и оптимизировать, когда появятся проблемы, преждевременная оптимизация чревата).
Про типа join'ов смотреть здесь (отличная инфографика).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
Предельный случай - второй запрос и индекс по pubslished & user_id & time - будет быстрее из-за отсутствия необходимости как фильтрации, так и сортировки данных.

Если что-то сложнее и, например, range ограничения - то первый запрос будет в конечном итоге быстрее. Ведь вам всё равно тянуть эти записи придётся, но уже отдельным запросом, потом джойнить на приложении.
И поскольку вопрос о типах джойнов выдаёт ваш невысокий уровень в SQL - не заморачивайтесь, вам эта спичечная разница ни к чему.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы