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: таблица различий

ПараметрUNIONUNION ALL
ДедупликацияДаНет
СкоростьМедленнееБыстрее
ВнутреннеSORT + DISTINCTПросто конкатенация
Сохраняет порядокНетНе гарантирован, но обычно да
Когда стандартЕсли дубликаты возможныЕсли их точно нет

Когда использовать UNION

Когда использовать 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 в плане запроса.
Тренировать SQL в Telegram

Ещё сравнения по теме