TEXT
и VarChar(MAX)
не тип данных Unicode большой переменной длины, который может хранить максимум 2147483647 символов, отличных от Unicode (т. е. максимальный объем памяти составляет: 2 ГБ).
По ссылке MSDN Microsoft предлагает избегать использования типа данных Text, и он будет удален в следующих версиях Sql Server. Varchar (Max) - это предлагаемый тип данных для хранения больших строковых значений вместо типа данных Text.
- Хранение в ряд или вне строки
Данные Text
столбца типа хранятся вне строки на отдельных страницах данных больших объектов. Строка на странице данных таблицы будет иметь только 16-байтовый указатель на страницу данных большого объекта, где присутствуют фактические данные. В то время как данные Varchar(max)
столбца типа хранятся в строке, если они меньше или равны 8000 байт. Если значение столбца Varchar (max) пересекает 8000 байтов, то значение столбца Varchar (max) сохраняется на отдельных страницах данных больших объектов, и строка будет иметь только 16-байтовый указатель на страницу данных больших объектов, где присутствуют фактические данные. Так что In-Row
Varchar (Max) хорош для поиска и поиска.
- Поддерживаемые / неподдерживаемые функции
Некоторые строковые функции, операторы или конструкции, которые не работают со столбцом типа Text, но они работают со столбцом типа VarChar (Max).
=
Равно Оператору в столбце типа VarChar (Max)
Группировать по выражению в столбце типа VarChar (Max)
- Соображения системы ввода / вывода
Поскольку мы знаем, что значения столбца типа VarChar (Max) хранятся вне строки, только если длина значения, которое должно быть сохранено в нем, превышает 8000 байт или недостаточно места в строке, в противном случае он будет хранить это в ряд. Таким образом, если большая часть значений, хранящихся в столбце VarChar (Max), является большой и хранится вне строки, поведение при извлечении данных будет почти таким же, как в столбце типа «Текст».
Но если большинство значений, хранящихся в столбцах типа VarChar (Max), достаточно малы для хранения в строке. Затем для извлечения данных, в которые не включены столбцы большого объекта, требуется большее количество страниц данных для чтения, поскольку значение столбца большого объекта хранится в строке на той же странице данных, где хранятся значения столбца без большого объекта. Но если запрос на выборку включает столбец LOB, то для извлечения данных требуется меньше страниц для чтения по сравнению со столбцами типа Text.
Вывод
Используйте VarChar(MAX)
тип данных, а не TEXT
для хорошей производительности.
Источник