Как создать некластеризованный индекс для строкового столбца в SQL Server?

Я только что попробовал это и получил полезное сообщение о том, что

Столбец «Имя пользователя» в таблице «Пользователи» имеет тип, недопустимый для использования в качестве ключевого столбца в индексе.

Имя пользователя — это столбец nvarchar(max).


person Tim Lovell-Smith    schedule 07.03.2013    source источник
comment
nvarchar(max) нельзя использовать в качестве ограничения/индекса. Посмотрите на этот похожий вопрос: stackoverflow.com/questions/1184490/   -  person squillman    schedule 07.03.2013
comment
Зачем вам нужен индекс для столбца nvarchar(max)? Почему вы используете nvarchar(max) для имени пользователя? Как вы думаете, кому-нибудь нужен миллиард символов в имени пользователя? Вероятно, nvarchar(50), (64) or (255) будет достаточно. (320), если он будет представлять адрес электронной почты. И мне интересно, действительно ли здесь требуется Unicode.   -  person Aaron Bertrand    schedule 07.03.2013
comment
LOL миллиард символов даже на нескольких языках.   -  person Nick.McDermaid    schedule 07.03.2013
comment
Максимальный размер записи индекса составляет 900 байт. Все, что больше, не может индексироваться. Таким образом, вы можете индексировать максимум nvarchar(450) (или varchar(900)) - столбцы больших строк не подходят для индекса.   -  person marc_s    schedule 07.03.2013
comment
Я рад, что доставил людям удовольствие. ;)   -  person Tim Lovell-Smith    schedule 07.03.2013


Ответы (1)


Вы не можете добавить индекс к столбцу nvarchar(max) или varchar(max), но он может быть частью индекса.

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

Исходя из имени вашего столбца «Имя пользователя», я бы изменил тип столбца на что-то меньшее, например nvarchar (50). Тип данных nvarchar(max) может хранить до 4 ГБ текста и используется для более полного хранения текста (в этом случае вы должны настроить полнотекстовый поиск).

person Almond    schedule 07.03.2013
comment
Это также сделает индекс огромным и неудобным в сопровождении. - person Aaron Bertrand; 07.03.2013