SQL Server行在出现问题之前可以有多大?

时间:2010-03-25 19:59:00

标签: sql-server-2005

有时我会使用SQL Server 2000遇到此限制,行大小不能超过8K字节。 SQL Server 2000并不是最先进的技术,但它仍然存在于生产代码中,并且因为某些表被非规范化,这是一个问题。

然而,这似乎是SQL Server 2005的一个非问题。至少,它不会抱怨行大小超过8K,但是会发生什么呢?为什么这是SQL Server 2000中的一个问题?

我需要关心我的行增长吗?我应该尝试避免大行吗?就数据库和/或CPU时间的大小而言,varchar(max)和varbinary(max)是解决方案还是昂贵的? 为什么我一直关心指定特定列的长度,当某个人达到上限时似乎只是一个时间问题?

2 个答案:

答案 0 :(得分:4)

在此处阅读SQL Server 2005行大小限制:

How Sql Server 2005 bypasses the 8KB row size limitation

如果行数据大于8K,SQL Server将拆分行数据,并使用指向原始数据的指针将多余数据存储到第二个数据页中。这将影响查询和联接的性能。

答案 1 :(得分:1)

仍有行大小限制 - 最小行大小不能超过8060字节

CREATE TABLE Table1 (
    col1 char(2000),
    col2 char(2000),
    col3 char(2000),
    col4 char(2000),
    col5 char(2000)
);

Creating or altering table 'Table1' failed because the minimum row size would be
10007, including 7 bytes of internal overhead. This exceeds the maximum allowable
table row size of 8060 bytes.

当您使用varchar(MAX)时,字符串不会存储在行内,而是存储在另一个位置,因此以这种方式可以存储超过8060个字节。存储大量的大字符串当然很昂贵。只需进行计算,您就会发现它将快速消耗大量磁盘空间。但是如果你确实需要存储大字符串,那么就可以了。数据库可以处理它。