Сопоставление индексов в SQL Server

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

Ответ 1

Я не верю, что ты можешь. Хотя COLLATE задокументирован отдельно, вы заметите, что в списке есть только 3 места:

  • Создание или изменение базы данных
  • Создание или изменение столбца таблицы
  • Выполнение сопоставления выражения

Обратите внимание, что, например, в CREATE TABLE:

<column_definition> ::=
column_name <data_type>
    [ FILESTREAM ]
    [ COLLATE collation_name ] 
    ...

что явно указано предложение COLLATE.

В то время как CREATE INDEX:

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON <object> ( column [ ASC | DESC ] [ ,...n ] ) 
    ...

обратите внимание, что все, что разрешено здесь, - это столбец, а не определение столбца, а также выражение.


Я считаю, что сортировка каждого столбца в индексе следует за сопоставлением столбца (ов), расположенного ниже, в соответствующей таблице. Насколько мне известно, сопоставление базы данных не используется, кроме как предоставлять сортировку по умолчанию столбцам во время инструкций таблицы CREATE/ALTER.

Ответ 2

Вы можете создать вычисленное поле с необходимой сортировкой и создать индекс в этом поле.

Ответ 3

Попробуйте сделать индексированное представление и добавьте сортировку в столбец в инструкции select.