Во-первых, UNION
и CONCATENATION
немного отличаются.
CONCATENATION
эквивалентно UNION-ALL
. Это объединяет входные таблицы и возвращает все строки.
UNION
объединяет входные таблицы. Затем возвращает отдельные строки.
Итак, UNION
имеет дополнительную операцию сортировки / отличия по сравнению с CONCATENATION
. Насколько велик этот эффект, зависит от вашего набора данных.
Вы увидите CONCATENATION
, когда оптимизатор выполнит расширение ИЛИ. Но обратите внимание, что в Oracle Database 12.2 это изменилось :
- CONCATENATION заменяется на UNION-ALL.
- Каждая ветвь UNION-ALL можетподвергаться дальнейшим преобразованиям запросов, если это применимо. Это невозможно с CONCATENATION.
- Параллельные запросы могут выполнять ветви UNION-ALL одновременно. Опять же, это невозможно с CONCATENATION.
Так что UNION-ALL
может придумать лучшие планы для каждой операции ниже. И запустить их в то же время (при использовании параллельного). Так что во многих случаях это будет быстрее, чем CONCATENATION
.