Сортировка может выполняться либо для устранения дублирующих значений, либо для упорядочивания данных. Оптимизатор рассматривает SELECT DISTINCT, агрегатную функцию, содержащую DISTINCT, раздел GROUP BY и раздел ORDER BY как запросы сортировки данных. Поскольку сортировка является одной из наиболее трудоемких операций при выполнении запроса, оптимизатор комбинирует сортировки при возникновении следующих условий:
список выборки оператора SELECT DISTINCT является подмножеством списка столбцов упорядочивания раздела ORDER BY или списка столбцов группировки раздела GROUP BY;
столбцы группировки раздела GROUP BY образуют подмножество столбцов упорядочивания раздела ORDER BY; столбцы группировки образуют префикс столбцов упорядочивания;
столбцы упорядочивания раздела ORDER BY образуют подмножество списка выборки оператора SELECT DISTINCT или столбцов группировки раздела GROUP BY.
Кроме того, оптимизатор устраняет сортировку, когда можно использовать индекс, в следующих случаях:
Индекс обеспечивает порядок данных, требуемый разделами GROUP BY или ORDER BY.
Столбцы группировки или весь список выборки SELECT DISTINCT образуют префикс ключа уникального индекса.