В какой момент становится более эффективным использовать текстовое поле, чем поле nvarchar в SQL Server? - PullRequest
1 голос
/ 12 мая 2011

Как долго должно быть поле nvarchar, прежде чем лучше использовать текстовое поле в SQL Server? Каковы общие указания на использование того или иного текстового контента, который может запрашиваться или не запрашиваться?

Ответы [ 3 ]

7 голосов
/ 12 мая 2011

Насколько я понимаю, тип данных TEXT никогда не должен использоваться в SQL 2005+. Вместо этого вы должны начать использовать VARCHAR(MAX).

См. этот вопрос о VARCHAR(MAX) против TEXT.

ОБНОВЛЕНИЕ (за комментарий):

Этот блог хорошо объясняет преимущества. Взято из него:

Но боль от использования типового текста возникает при попытке выполнить запрос против него. Например, группировка по типу текста невозможна.

Еще одним недостатком использования текстовых типов является увеличение дискового ввода-вывода из-за того, что каждая запись теперь указывает на большой двоичный объект (или файл).

В общем, VARCHAR(MAX) сохраняет данные вместе с записью и дает вам возможность обрабатывать их как другие VARCHAR типы, например, используя GROUP BY и строковые функции (LEN, CHARINDEX и т. Д.). ).

Для TEXT вам почти всегда приходится преобразовывать его в VARCHAR, чтобы использовать против него функции.

Но, возвращаясь к сути вашего вопроса об эффективности, я не думаю, что будет более эффективно использовать TEXT против VARCHAR(MAX). Глядя на эту статью MSDN (поиск "типы данных"), TEXT устарела и должна быть заменена на VARCHAR (MAX).

3 голосов
/ 12 мая 2011

Прежде всего, не используйте текст вообще. MSDN сообщает:

Типы данных ntext, text и image будут удалены в будущей версии Microsoft SQL Server.Избегайте использования этих типов данных в новых разработках и планируйте модифицировать приложения, которые их используют в настоящее время.Вместо этого используйте nvarchar (max), varchar (max) и varbinary (max).

varchar (max) - это то, что вам может понадобиться.

Если вы сравниваете varchar (n)против varchar (max), технически это два разных типа данных (хранятся по-разному):

  • varchar (n) значение всегда хранится внутри строки.Это означает, что он не может быть больше, чем максимальный размер строки, и строка не может быть больше, чем размер страницы, который составляет 8 КБ.

  • varchar (max) хранится за пределами строки.Строка имеет указатель на отдельную страницу BLOB.Тем не менее, при определенных условиях varchar (max) может хранить данные как обычную строку, очевидно, что она должна как минимум соответствовать размеру строки.

Так что, если ваша строка потенциально больше 8K,Вы должны использовать VARCHAR (Макс).В противном случае использование varchar (n), вероятно, будет предпочтительнее, так как он быстрее извлекает данные в строке по сравнению с внешней страницей.

MSDN говорит :

Используйте varchar (max), когда размеры записей данных столбца значительно различаются, а размер может превышать 8 000 байт.

1 голос
/ 12 мая 2011

Основное преимущество VARCHAR перед TEXT заключается в том, что вы можете запускать на нем манипуляции со строками и строковые функции.С VARCHAR (max), теперь у вас в основном есть огромная большая (неограниченная) переменная, которой вы можете манипулировать так, как хотите ..

...