Порядок сортировки кластерного индекса по умолчанию - PullRequest
3 голосов
/ 09 мая 2019

Я создаю таблицу с кластерным индексом первичного ключа.Когда я создаю без asc / desc, каков порядок сортировки по умолчанию?Какой порядок сортировки (ASC или DESC) более эффективен?Вот пример кода.

Create table employee (
  Name nvarchar(30),
  City nvarchar(30),
  Dob date,
  Constraint pk_employee primary key clustered
  (Name asc, dob asc)
)
Go

Ответы [ 3 ]

1 голос
/ 09 мая 2019

Индексы хранятся в виде бинарных деревьев, поэтому я бы сказал, что не будет никакой разницы в производительности.

В обоих случаях, ASC и DESC, SQL нужно спускаться, чтобы получить лист (записьвключен в результат).

1 голос
/ 09 мая 2019

По возрастанию порядок эффективнее .Это верно для всех СУБД, с которыми я работал, и это верно по ряду причин.Самая большая проблема с сортировкой по убыванию (упорядоченное-обратное сканирование) в SQL Server заключается в том, что упорядоченное-обратное сканирование не может использовать план параллельного выполнения.

Имейте в виду, что сортировка имеет сложность (log n), которая медленнее, чем линейная.Другими словами, сортировка каждой строки становится более дорогой по мере добавления новых строк.Вот почему оптимизатор часто выбирает план параллельного выполнения для обработки сортировок.Если у вас много строк для сортировки, вы хотите, чтобы в оптимизаторе была возможность распараллелить сортировку.Итак, еще раз - восхождение более эффективно.

Существуют другие оптимизации, недоступные оптимизатору, когда вы выполняете упорядоченное обратное сканирование.Например, при использовании секционированных оконных функций (функции, которые используют предложение OVER и PARTITION BY), повышение обычно более эффективно.

Вот две действительно хорошие статьи на эту тему (обе статьи Ицик Бен-Ган):

SQL Server: предотвращение сортировки по убыванию

Нисходящие индексы

1 голос
/ 09 мая 2019

ASC по умолчанию.Это зависит от того, какой поиск выполняется.ASC более эффективен при работе с личностью.

...