我有一个很少使用的Varchar(max)字段的Microsoft SQL Server 2008表。 将该字段移动到另一个表并指向该表更有意义吗?
或者如果Varchar(max)字段包含null,它是否占用了大量空间?
答案 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只包含长度+内容。
可空字段使用额外的位来存储空/非空状态,因此记录本身不会占用额外的空间。