代码之家  ›  专栏  ›  技术社区  ›  John Leidegren

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

  •  2
  • John Leidegren  · 技术社区  · 15 年前

    偶尔,我会遇到这样的限制:使用sql server 2000时,行大小不能超过8k字节。sql server 2000并不是最先进的,但它仍然在生产代码中,因为有些表是非规范化的,所以这是一个问题。

    但是,对于sql server 2005,这似乎不是问题。至少,它不会抱怨行大小大于8K,但是会发生什么,为什么这是SQL Server 2000中的一个问题?

    我需要关心我的排成长吗?我应该尽量避免大排吗?从数据库大小和/或CPU时间来看,varchar(max)和varbinary(max)是一个解决方案还是代价高昂? 为什么我会关心指定一个特定列的长度,而似乎有些人达到这个上限只是时间问题?

    2 回复  |  直到 15 年前
        1
  •  4
  •   MicSim    15 年前

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

    How Sql Server 2005 bypasses the 8KB row size limitation

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

        2
  •  1
  •   Mark Byers    15 年前

    仍有行大小限制-最小行大小不能超过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个字节。存储大量的大字符串当然是昂贵的。只要计算一下,你就会发现它会很快消耗大量的磁盘空间。但如果你确实需要存储大字符串,那么就可以这样做。数据库可以处理它。