Последствия nvarchar (50) vs nvarchar (max)

Каковы общие различия в хранении и производительности между приведенными ниже двумя таблицами, если их единственная разница - nvarchar(50) против nvarchar(max) а строки в каждом поле варьируются от 1 до 50 символов? Это в SQL Server 2005.

ТАБЛИЦА 1

firstname nvarchar (50)
lastname nvarchar (50)
username nvarchar (50)

ТАБЛИЦА 2

firstname nvarchar (max)
lastname nvarchar (max)
username nvarchar (max)

Ответ 1

Если вам гарантировано иметь строки от 1 до 50 символов, то один и тот же запрос, выполняемый по строкам в длину, будет работать быстрее, используя varchar (X) vs varchar (MAX). Кроме того, вы не можете создать индекс в поле varchar (MAX).

После того, как ваши строки имеют значения длиной более 8000 символов, есть дополнительные соображения производительности, с которыми можно бороться (строки в основном рассматриваются как TEXT вместо varchar (n)). Хотя это не очень важно для сравнения, поскольку для строк длиной более 8000 нет опции varchar (N).

Ответ 2

Прежде всего, вы не сможете создавать индексы на столбцах (max) длины. Поэтому, если вы собираетесь хранить доступные для поиска данные, то есть, если эти столбцы будут частью предиката WHERE, вы не сможете улучшить производительность запросов. В таком случае вам может потребоваться рассмотреть FullText Search и индексы в этих столбцах.

Ответ 3

nvarchar max - для столбцов до 2 ГБ. По сути, это требует больше ресурсов. Вам лучше использовать nvarchar (50), если вы знаете, что вам не понадобится столько места. каждый символ составляет около 2 байтов, а с 2 ГБ - 1 млрд. символов...