UNION vs UNION ALL: разница и что быстрее на собесе
UNION и UNION ALL объединяют результаты двух запросов в один. Главное различие — дедупликация: UNION удаляет дубликаты (и платит за это сортировкой), UNION ALL сохраняет всё. На собесе обычно спрашивают, что быстрее и почему.
Если коротко. UNION удаляет дубликаты (медленнее), UNION ALL — нет (быстрее). Если дубликатов точно нет, всегда берите UNION ALL.
Проверь себя · 1/3разбор после ответа
Первый набор содержит значения:
100, 100, 100, 200. Второй набор: 100, 300. Чем отличаются результаты EXCEPT и EXCEPT ALL?UNION vs UNION ALL: таблица различий
Когда использовать UNION
- Нужно гарантированно убрать дубликаты между запросами.
- Дубликаты возможны и они вам не нужны.
- Допустима стоимость сортировки/хеша для дедупликации.
Когда использовать UNION ALL
- Дубликаты невозможны (например, объединяете данные с непересекающимися ключами).
- Дубликаты допустимы или нужны для подсчёта.
- Важна скорость — UNION ALL не делает лишней работы.
На примере
UNION — с дедупликацией
SELECT user_id FROM ru_orders
UNION
SELECT user_id FROM eu_orders;UNION ALL — без дедупликации
SELECT user_id FROM ru_orders
UNION ALL
SELECT user_id FROM eu_orders;Ловушка на собесе
На собесе ожидают, что вы спросите про возможность дубликатов. Если их нет — UNION ALL всегда правильный ответ. Использовать UNION «на всякий случай» — это лишний пагубный SORT в плане запроса.