В чем разница между операторами UNION и CONCATENATION с точки зрения производительности? - PullRequest
1 голос
/ 23 октября 2019

Иногда, это можно увидеть шаг КОНКАТЕНЦИИ в плане объяснения.

Интересно, в чем разница между операторами объединения и конкатенации с точки зрения настройки производительности?

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Во-первых, 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.

0 голосов
/ 23 октября 2019

СОЮЗ должен удалить дубликаты, что дорого. CONCATENATION - это шаг, который происходит, когда вы делаете UNION ALL (который не удаляет дубликаты, следовательно, дешевле).

...