Как количество JOIN-ов влияет на скорость запроса

«Как количество JOIN-ов влияет на скорость запроса» — вопрос из категории SQL, который задают на 27% собеседований Системный Аналитик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Каждый JOIN добавляет сложность запросу, увеличивая время выполнения. Основные факторы влияния:

  1. Вычислительная нагрузка - каждый JOIN требует сопоставления данных из таблиц, что увеличивает CPU usage.
  2. Объем данных - чем больше строк в соединяемых таблицах, тем дольше выполняется операция.
  3. Индексы - отсутствие подходящих индексов на join-полях резко снижает производительность.

Пример с 3 JOIN-ами (хуже):

SELECT o.order_id, c.name, p.product_name, s.supplier 
FROM orders o
JOIN customers c ON o.customer_id = c.id
JOIN products p ON o.product_id = p.id
JOIN suppliers s ON p.supplier_id = s.id

Оптимизация:

  • Используйте только необходимые JOIN
  • Добавляйте индексы на поля соединения
  • Рассмотрите денормализацию для часто используемых связей
  • Для сложных запросов используйте временные таблицы или CTE

Как правило, 4-5 JOIN-ов - разумный предел для OLTP-систем. Для аналитических запросов допустимо больше, но требуется особая оптимизация.