SQL Server имеет три типа хранилища: строчное, LOB и переполнение строк, см. Организация таблиц и индексов . Хранилище в ряду является самым быстрым для доступа. LOB и Row-Overflow похожи друг на друга, оба немного медленнее, чем в строке.
Если у вас есть столбец NVARCHAR (4000), он будет сохранен в строке, если это возможно, если нет, он будет сохранен в хранилище с переполнением строк. Наличие такого столбца не обязательно указывает на будущие проблемы с производительностью, но напрашивается вопрос: почему nvarchar (4000)? Ваши данные, вероятно, всегда будут иметь длину около 4000 символов? Может ли это быть 4001, как ваше приложение справится с этим в этом случае? Почему не nvarchar (макс)? Вы измерили производительность и обнаружили, что nvarchar (max) слишком медленный для вас?
Я бы рекомендовал использовать небольшую длину nvarchar, подходящую для реальных данных или nvarchar (max), если ожидается, что она будет большой. nvarchar (4000) пахнет как необоснованная и не проверенная преждевременная оптимизация.
Обновление
Для XML используйте тип данных XML . Он имеет много преимуществ перед varchar или nvarchar, например, тот факт, что он поддерживает XML-индексы , он поддерживает XML-методы и может фактически проверять XML на соответствие определенной схеме или, по крайней мере, для правильного соответствия XML.
XML будет храниться в хранилище больших объектов вне строки.
Даже если данные не в формате XML, я все равно рекомендовал бы хранилище больших объектов (nvarchar (max)) для чего-то, имеющего длину 1500. С извлечением данных, сохраненных в больших объектах, связаны затраты, но стоимость более чем компенсирована составив таблицу уже . Ширина строки таблицы является основным фактором производительности, поскольку более широкие таблицы занимают меньше строк на страницу, поэтому любая операция, которая должна сканировать диапазон строк или всю таблицу, должна извлекать больше страниц в память, и это проявляется в стоимость запроса (на самом деле движущий фактор общей стоимости). Хранимый столбец LOB только увеличивает размер строки на ширину «идентификатора страницы», которая, если я правильно помню, составляет 8 байт, так что вы можете получить намного лучшую плотность строк на странице, что ускоряет запросы.