Сортировка в СОЮЗ - PullRequest
       31

Сортировка в СОЮЗ

2 голосов
/ 11 февраля 2011

В oracle, объединяет ли две таблицы с помощью UNION неявную сортировку данных? Похоже, что это так, потому что, как показано в окне плана объяснения, он показывает «SORT UNIQUE».

У меня такой вопрос: по умолчанию, как или по какому столбцу он сортируется?

Ответы [ 3 ]

8 голосов
/ 11 февраля 2011

Необходимо обеспечить уникальность, поэтому обычно требуется выполнить хотя бы частичную сортировку.Теоретически, если он может гарантировать уникальность с помощью другого механизма (например, выбор из указанных разделов, где ключ раздела не гарантирует перекрытия), он может этого не делать, но я пока не видел такого примера.не нужно производить сортированный вывод, поскольку он может использовать сортировку по хешу.То есть он помещает все слова «А» в одно ведро, все слова «В» в следующем и так далее.Содержимое отдельных сегментов будет отсортировано, но запрос может вернуть результаты сегмента «B» до сегмента «A».

Между 9i и 10g Oracle изменил GROUP BY так, что он часто делалHASH SORT.В результате многие люди, считавшие само собой разумеющимся, что GROUP BY подразумевает отсортированный результат, были пойманы.

4 голосов
/ 11 февраля 2011

Оптимизатор имеет различные способы обеспечения уникальности при выполнении таких операций, как union, group by и distinct. И со временем, по мере того как Oracle совершенствует оптимизатор, можно надеяться, что появятся новые методы. Иногда это своего рода. Но нет никаких гарантий, что это всегда будет сортировка, даже если она использует сортировку сегодня, а может и не завтра.

Если вам нужно отсортировать вывод, единственный способ гарантировать это - предложение order by. Без order by Oracle (и в этом отношении любая база данных SQL) может свободно возвращать строки в любом порядке.

0 голосов
/ 11 февраля 2011

да, сортировка неявная для удаления дубликатов, поскольку UNION не включает дубликаты, такие как UNION ALL, однако, если вы хотите гарантированную сортировку, используйте ORDER BY после всех объединений, чтобы убедиться, что вы получаете желаемую сортировку

...