Мне было интересно, каковы будут последствия установки полей NVARCHAR в MAX вместо определенного размера в SQL Server 2008 и ограничение ввода из логики приложения. Кроме того, будут ли они плохой проектной практикой?
Ограничение размера NVARCHAR в SQLServer?
Ответ 1
NVARCHAR (MAX) намного лучше работает с меньшими данными, чем старый тип данных NTEXT, однако NVARCHAR (n) всегда будет более эффективным в некоторых областях.
Как правило, использование типа данных, который лучше всего представляет данные, которые вы храните, почти всегда является наилучшей практикой.
Ответ 2
Есть много последствий для производительности. В частности, в скалярном UDF, заполняющем полный набор символов, я заметил огромные различия в производительности, когда результат был объявлен как VARCHAR (MAX), хотя входы не превышали > 40 символов. Переход на VARCHAR (50) сделал ОГРОМНОЕ улучшение.
Ответ 3
Вы не должны устанавливать все свои поля в NVARCHAR (MAX), если знаете, что они никогда не будут содержать больше конечного числа символов из-за того, как SQL хранит данные такого типа - данные, достаточно малые, чтобы поместиться на странице сохраняться на странице, но когда он становится слишком большим, он будет перемещен со страницы и будет храниться отдельно.
Кроме того, вы уверены, что вам нужен NVARCHAR, поскольку он хранит данные Unicode, которые занимают в два раза больше пространства стандартного VARCHAR? Если вы знаете, вы будете использовать стандартные символы, вместо этого используйте VARCHAR.
Slo, подумайте об использовании вашего приложения. Если у вас есть поле адреса, которое не имеет теоретического ограничения на его размер, как бы вы напечатали его на конверте? Вы говорите, что вы будете внедрять логику в приложение переднего конца, но почему все еще позволяют базы данных иметь слишком большие данные? И что произойдет, если данные попадут в базу данных, которая нарушает логику в вашем интерфейсе?
Ответ 4
Просто чтобы дополнить все остальные ответы: будьте осторожны с сценариями, в которых данные могут поступать из других источников, например, как пример - текстовые файлы, импортированные извне ваших приложений; это может обойти любую логику приложения, если вы не дублируете ее в процедурах импорта...
Ответ 5
Основной недостаток заключается в том, что NVARCHAR(MAX)
нельзя индексировать с помощью простых индексов.
Кроме того, есть некоторые проблемы с переменными типа NVARCHAR(MAX)
и с производительностью функций, анализирующих эти переменные.
Если вы хотите хранить и извлекать данные как есть, а не анализировать их на стороне SQL Server
, тогда NVARCHAR(MAX)
отлично.
Ответ 6
При расчете предела имеет побочный эффект некоторой проверки на максимальной длине