稀疏Varchar(最大)

时间:2013-01-07 18:55:22

标签: sql-server

我有一个很少使用的Varchar(max)字段的Microsoft SQL Server 2008表。 将该字段移动到另一个表并指向该表更有意义吗?

或者如果Varchar(max)字段包含null,它是否占用了大量空间?

2 个答案:

答案 0 :(得分:6)

没有。 SQL Server已经为BLOB类型使用了单独的分配单元,请参阅Table and Index Organization。 NULL值只占一行中的一位,请参阅Anatomy of a Record

您将通过创建单独的表浪费更多空间,并且检查列是否为NULL或具有值将显着更昂贵。除了列值可以优化并在行中拉出小值,如果它们适合,则提供显着更快的访问。总的来说,不要试图微观优化引擎已经在推动其发展的东西,以使其尽可能高效....

如果是稀疏的(意味着它有许多(数百,数千)列,每行上有许多都是NULL),那么你可以使用sparse columns

答案 1 :(得分:2)

来自http://msdn.microsoft.com/en-us/library/aa224016(v=sql.80).aspx

  

varchar数据类型是可变长度数据类型。价值更短   比列的大小没有右边填充到大小   式柱

varchar只包含长度+内容。

可空字段使用额外的位来存储空/非空状态,因此记录本身不会占用额外的空间。