TEXT
并且VarChar(MAX)
是非Unicode大变长字符数据类型,最多可存储2,147,483,647个非Unicode字符(即最大存储容量为:2GB)。
根据MSDN,Microsoft 建议避免使用该TEXT
数据类型,它将在 SQL Server 的未来版本中删除。VarChar(MAX)
是存储大字符串值而不是数据类型的建议数据TEXT
类型。
类型列的数据以TEXT
行外方式存储在单独的 LOB 数据页中。表数据页中的行将只有一个 16 字节指针,指向实际数据所在的 LOB 数据页。如果类型列的数据VarChar(MAX)
小于或等于 8000 字节,则将其存储在行内。如果VarChar(MAX)
列的值大于 8000 字节,则VarChar(MAX)
列值存储在单独的 LOB 数据页中,并且行将只有一个 16 字节指针,指向实际数据所在的 LOB 数据页。所以“行内”VarChar(MAX)
有利于搜索和检索。
某些字符串函数、运算符和构造不适用于TEXT
类型列,但它们确实适用于VarChar(MAX)
类型列。
=
等于VarChar(MAX)
类型列上的运算符
GROUP BY
VarChar(MAX)
类型列上的子句
众所周知,VarChar(MAX)
类型列的值只有在值的长度大于 8000 字节或者行中没有足够的空间时才会被存储在行外,否则会被存储在行内。因此,如果存储在VarChar(MAX)
列中的大多数值都很大并且存储在行外,则数据检索行为将几乎类似于TEXT
类型列。
如果存储在类型列中的大多数值VarChar(MAX)
都足够小以存储在行内,则检索不包含 LOB 列的数据需要读取更多数据页,因为 LOB 列值存储在同一数据中的行内存储非 LOB 列值的页面。但是,如果查询包含 LOB 列,则与类型列SELECT
相比,它需要为数据检索读取的页面更少。TEXT
结论
使用VarChar(MAX)
数据类型而不是TEXT
获得更好的性能。
来源