使用 SQL varchar(max) 还是文本?

Aus*_*tin 3 sql sql-server-2005

我正在使用 SQL Server 2005 并且我有一列需要存储大量文本(有时超过 8000 个字符,varchar 限制)。使用“文本”数据类型有什么缺点吗?我还阅读了有关使用 varchar(MAX) 的信息——如果我存储在其中的大部分数据少于 8000 个字符会更好,但我需要能够支持更多?

Pau*_*dal 14

只要您有可能处理超过 8000 字节的数据,就应该始终使用 2005 年的新 LOB 类型,而不是传统类型(text、ntext、image)。

新类型适用于大多数内部字符串操作函数,而遗留类型则不然。它们以完全相同的方式存储在数据库中,但也有一些小的调整来读取新类型的算法。

但是有一些事情需要注意:

  • 传统类型默认存储在行外,这意味着无论数据大小如何,都有一个随机 IO 来获取数据。您当然可以使用“行内文本”选项更改此设置
  • 新类型存储的默认行,最多8000个字节的限制,只要有一个在记录空间。这减少了使用随机 IO 获取值的机会,但会使您的数据记录更长,从而导致其他问题。您可以通过更改 large-values-types-off-row 选项来更改数据是存储在行内还是行外
  • 任何时候表定义中有新的或旧的 LOB 类型都意味着表的聚集索引不能使用企业版中的在线索引操作。

我在http://www.sqlskills.com/BLOGS/PAUL/post/Importance-of-choosing-the-right-LOB-storage-technique.aspx 上发布了一篇博文,更详细地讨论了这个问题

希望这可以帮助