Мне интересно, есть ли возможность указать сортировку для столбца при создании индекса, который отличается от сортировки этого столбца? И при индексировании строковые данные сортируются в соответствии со сверкой столбца или сортировкой базы данных?
Сопоставление индексов в 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.