← Все вопросы
Чем UNION отличается от UNION ALL и что быстрее?
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 = без.
Ваш ответ
Войдите, чтобы ответить на вопрос.