← Все вопросы

Чем UNION отличается от UNION ALL и что быстрее?

Задан 17 месяцев назад746 просмотров3 ответа
16

Склеиваю два SELECT в один список. Вижу и UNION, и UNION ALL. Результат вроде похожий, но количество строк иногда разное. В чём разница и что выбирать?

3 ответа

27
✓ Принятый ответ — помог автору

UNION убирает дубликаты из объединённого результата (как будто прогоняет всё через DISTINCT). UNION ALL склеивает как есть, со всеми повторами.

Из-за дедупликации UNION ещё и медленнее: ему нужно отсортировать/прохешировать всё, чтобы найти и выкинуть дубли. Поэтому правило: если ты ТОЧНО знаешь, что пересечений нет (или повторы тебе не мешают) — бери UNION ALL, он быстрее. UNION — только когда дубликаты реально надо схлопнуть.

SELECT name FROM clients
UNION ALL
SELECT name FROM suppliers;

И помни: число и типы колонок в обоих SELECT должны совпадать.

Саша Маленький по умолчанию народ часто пишет UNION, хотя нужен UNION ALL — лишняя нагрузка на ровном месте · 16 месяцев назад
8

UNION ALL оставляет дубли и работает быстрее, UNION их удаляет.

5

UNION = с DISTINCT, UNION ALL = без.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект