Какова максимальная длина varchar для создания некластеризованного индекса на сервере sql?

Создание non-clustered index в столбцах с varchar(max) запрещено в sql server.

Итак, на какой максимальной varchar длине можно non-clustered index создать?


person Simple Code    schedule 01.03.2018    source источник
comment
Максимальный размер ключа индекса - 900b. В любом случае индексирование длинных строк - плохая идея.   -  person Ivan Starostin    schedule 01.03.2018


Ответы (2)


Длина ключевого столбца не должна превышать 900 байт, но для sqlserver 2016 cu2 это 1700 байт.

Вы можете включить максимальное количество столбцов как включенное, но они не должны быть частью ключевых столбцов.

create table t1
(
col1 varchar(1700),
id varchar(max)
)

create index nc on t1(col1) 
include (id)

Чтобы добавить, из SQLServer 2012 вы также можете перестроить столбцы индекса, которые относятся к типу LOB, хотя текст, ntext и изображение не поддерживаются.

Ремус Русану ведет хороший блог о том, почему в более ранних версиях 2012 года не поддерживались операции перестроения индекса в Интернете.

Дополнительная литература:
varchar (max) везде?
Операции с онлайн-индексами для индексов, содержащих столбцы LOB < / а>

person TheGameiswar    schedule 01.03.2018
comment
Если у меня есть столбец описания, включенный в индекс, и после этого я выполнил следующий запрос, выберите из таблицы1, где description = '% some text%', будет ли это похоже на создание некластеризованного индекса для столбца описания или нет? - person Simple Code; 01.03.2018
comment
Вы говорите, включен ли столбец описания в список индекса и как выполняется ваш запрос в комментарии? - person TheGameiswar; 01.03.2018
comment
да, я имел в виду, что если я помещу столбец описания во включенный список некластеризованного индекса, каковы преимущества, когда я выполняю поисковый запрос только для столбца описания - person Simple Code; 01.03.2018
comment
SQL не может использовать индексы в запросах с использованием like и в указанном выше случае, поскольку столбец включен в список ... даже без использования like sql может сканировать общий некластеризованный индекс - person TheGameiswar; 01.03.2018
comment
У меня есть столбец описания проекта, длина которого составляет 400 символов, и он играет ключевую роль во всех моих поисковых запросах (например, в запросах), было бы нехорошо создавать некластеризованный индекс в этом столбце (который представляет собой относительно длинную строку) - person Simple Code; 01.03.2018
comment
Я думаю, вам следует использовать полнотекстовый поиск, а не лайкать - person TheGameiswar; 01.03.2018

Максимальное количество байтов для некластеризованного индекса (до 2016 г.) - 900:

https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server

Итак, попробуйте VARCHAR (900) и сообщите нам, как у вас дела.

person MJH    schedule 01.03.2018