TEXT
и VarChar(MAX)
- это тип данных символов Unicode большого размера с переменной длиной, который может хранить максимум 2147483647 символов, отличных от Unicode (т. Е. Максимальный объем памяти составляет 2 ГБ).
Согласно ссылка MSDN Microsoft предлагает избегать использования типа данных Text, и он будет удален в следующих версиях Sql Server. Varchar (Max) - это предлагаемый тип данных для хранения больших строковых значений вместо типа данных Text.
- Хранение в ряд или вне строки
Данные столбца типа Text
хранятся вне строки на отдельных страницах данных больших объектов. Строка на странице данных таблицы будет иметь только 16-байтовый указатель на страницу данных LOB, где присутствуют фактические данные. В то время как данные столбца типа 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
для хорошей производительности.
Источник