TEXT
和VarChar(MAX)
是非Unicode大可变长度字符数据类型,它可以存储最大的2147483647非Unicode字符(即最大存储容量是:2GB)。
根据MSDN链接, Microsoft建议避免使用Text数据类型,它将在Sql Server的将来版本中将其删除。Varchar(Max)是用于存储大字符串值的建议数据类型,而不是Text数据类型。
Text
类型列的数据行外存储在单独的LOB数据页中。表数据页中的行将只有16个字节的指针指向实际数据所在的LOB数据页。Varchar(max)
如果类型列的数据小于或等于8000个字节,则将其存储在行中。如果Varchar(max)列的值超过了8000个字节,则Varchar(max)列的值将存储在单独的LOB数据页中,并且行将仅具有指向存在实际数据的LOB数据页的16字节指针。因此,In-Row
Varchar(Max)非常适合搜索和检索。
某些字符串函数,运算符或构造在Text type列上不起作用,但在VarChar(Max)type列上起作用。
=
等于VarChar(Max)类型列上的运算符
在VarChar(Max)类型列上按子句分组
我们知道,仅当要存储在其中的值的长度大于8000个字节或行中没有足够的空间时,才会在行外存储VarChar(Max)类型的列值,否则它将存储它在行中。因此,如果存储在VarChar(Max)列中的大多数值很大并且存储在行外,则数据检索行为将几乎类似于“文本类型”列的行为。
但是,如果大多数存储在VarChar(Max)类型列中的值都足够小,可以存储行内。然后,要检索不包含LOB列的数据,需要读取更多数量的数据页,因为将LOB列值行存储在存储非LOB列值的同一数据页中。但是,如果选择查询包含LOB列,则与Text类型列相比,它需要较少的页面数来读取数据。
结论
使用VarChar(MAX)
数据类型而不是TEXT
为了获得良好的性能。
资源