有时我会使用SQL Server 2000遇到此限制,行大小不能超过8K字节。 SQL Server 2000并不是最先进的技术,但它仍然存在于生产代码中,并且因为某些表被非规范化,这是一个问题。
然而,这似乎是SQL Server 2005的一个非问题。至少,它不会抱怨行大小超过8K,但是会发生什么呢?为什么这是SQL Server 2000中的一个问题?
我需要关心我的行增长吗?我应该尝试避免大行吗?就数据库和/或CPU时间的大小而言,varchar(max)和varbinary(max)是解决方案还是昂贵的? 为什么我一直关心指定特定列的长度,当某个人达到上限时似乎只是一个时间问题?
答案 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个字节。存储大量的大字符串当然很昂贵。只需进行计算,您就会发现它将快速消耗大量磁盘空间。但是如果你确实需要存储大字符串,那么就可以了。数据库可以处理它。