Производительность индексов, которые используют nvarchar (MAX), против индексов, основанных на nvarchar с фиксированными символами? - PullRequest
0 голосов
/ 14 февраля 2020

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

Можно ли определить ее как nvarchar(MAX) или лучше указать сколько символов может иметь (например, nvarchar(10)), чтобы ускорить как запись, так и получение данных с использованием индекса?

1 Ответ

2 голосов
/ 14 февраля 2020

Ну, вы можете определить индекс для столбца nvarchar, который превышает максимальную длину, но не для nvarchar(max).

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

Внимание! Максимальная длина ключа для некластеризованного индекса составляет 1700 байт. Индекс 'idx_t_x' имеет максимальную длину 8000 байт. Для некоторой комбинации больших значений операция вставки / обновления завершится неудачей.

Таким образом, операции вставки и обновления будут прерываться, если в записи более 900 или 1700 байт, в зависимости от версии SQL Сервер:

SQL Сервер 2016 и Azure SQL В базе данных увеличен максимальный размер ключей индекса с некластеризованными индексами. Новый максимальный размер ключа для некластеризованных индексов составляет 1700 байт. Максимальный размер ключа для кластеризованных индексов остается 900 байтов.

Таким образом, эффективный ответ - «нет». Если вы храните текст в столбце, вам может потребоваться полнотекстовый индекс. Если вы хотите предотвратить дублирование, вы можете рассмотреть различные формы хеширования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...