行溢出数据超过 8 KB

一个表中的每一行最多可以包含 8,060 字节。在 SQL Server 2005 中,对于包含 varcharnvarcharvarbinarysql_variant 或 CLR 用户定义类型列的表,可以放宽此限制。其中每列的长度仍必须在 8,000 字节的限制内,但是它们的总宽可以超过 8,060 字节的限制。创建和修改 varcharnvarcharvarbinarysql_variant 或 CLR 用户定义类型的列以及更新或插入数据时,此限制适用于上述列。

ms186981.note(zh-cn,SQL.90).gif注意:
此限制不适用于 varchar(max)nvarchar(max)varbinary(max)textimagexml 列。有关这些列的存储的详细信息,请参阅使用大值数据类型使用 Text 和 Image 数据使用 XML 数据

行溢出注意事项

当合并每行超过 8060 字节的 varcharnvarcharvarbinarysql_variant 或 CLR 用户定义类型的列时,请注意下列事项:

  • 超过 8060 字节的行大小限制可能会影响性能,因为 SQL Server 2005 数据库引擎 仍保持每页 8 KB 的限制。当合并 varcharnvarcharvarbinarysql_variant 或 CLR 用户定义类型的列超过此限制时,数据库引擎 将把最大宽度的记录列移动到 ROW_OVERFLOW_DATA 分配单元的另一页上,而在原始页上保留一个 24 字节指针。如果更新操作使记录变长,大型记录将被动态移动到另一页。如果更新操作使记录变短,记录可能会移回 IN_ROW_DATA 分配单元中的原始页。此外,执行查询和其他选择操作(例如,对包含行溢出数据的大型记录进行排序或合并)将延长处理时间,因为这些记录将同步处理,而不是异步处理。
    因此,当要设计的表中包含多个 varcharnvarcharvarbinarysql_variant 或 CLR 用户定义类型的列时,请考虑可能溢出的行的百分比,以及可能查询这些溢出数据的频率。如果可能需要经常查询行溢出数据中的许多行,请考虑对表格进行规范化处理,以使某些列移动到另一个表中。然后可以在异步 JOIN 操作中执行查询。
  • 对于 varcharnvarcharvarbinarysql_variant 或 CLR 用户定义类型的列,单个列的长度仍然必须在 8000 字节的限制之内。只有它们的合并长度可以超过表的 8060 字节的行限制。
  • 其他数据类型列的和(包括 charnchar 数据)必须在 8,060 字节的行限制之内。大型对象数据也不受 8,060 字节行限制的制约。
  • 聚集索引的索引键不能包含在 ROW_OVERFLOW_DATA 分配单元中具有现有数据的 varchar 列。如果对 varchar 列创建了聚集索引,并且在 IN_ROW_DATA 分配单元中存在现有数据,则对该列执行的将数据推送到行外的后续插入或更新操作将会失败。有关分配单元的详细信息,请参阅表组织和索引组织
  • 可以包括包含行溢出数据的列,作为非聚集索引的键列或非键列。

若要获得有关可能包含行溢出数据的表或索引的信息,请使用 sys.dm_db_index_physical_stats 动态管理对象。

请参阅

概念

为列分配数据类型

帮助和信息

获取 SQL Server 2005 帮助