SQL Middle EXPLAIN и оптимизация спрашивают часто обновлено
Перепиши подзапрос в SELECT на JOIN с GROUP BY
Условие
Отчёт строится запросом с коррелированным подзапросом для каждой строки. Перепиши его на соединение с группировкой, сохранив результат (клиенты без заказов тоже должны остаться с нулём).
Колонки: id, name, orders_cnt. Порядок строк не важен.
SELECT c.id, c.name,
(SELECT COUNT(*) FROM orders o WHERE o.customer_id = c.id) AS orders_cnt
FROM customers c;
Как подойти
Подсказки: 2
LEFT JOIN+GROUP BY.- Что вернёт
COUNT(*)для клиента без заказов?
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Порядок разбора медленного запроса
Следующий вопрос
Перепиши DISTINCT после JOIN на EXISTS