我有一个很少使用的Varchar(max)字段的Microsoft SQL Server 2008表。 将该字段移到另一个表并指向该表更合理吗?Sparse Varchar(max)
或者如果一个Varchar(max)字段包含null,它是否占用大量空间?
我有一个很少使用的Varchar(max)字段的Microsoft SQL Server 2008表。 将该字段移到另一个表并指向该表更合理吗?Sparse Varchar(max)
或者如果一个Varchar(max)字段包含null,它是否占用大量空间?
编号SQL Server已经为BLOB类型使用了单独的分配单元,请参阅Table and Index Organization。 NULL值只占用一行中的一个位,请参阅Anatomy of a Record。
您将通过创建单独的表来浪费更多空间,并且检查列是否为NULL或具有值将花费更高的代价。除此之外,列值可以被优化,并且如果它们适合的话,可以小的值在行内拉动,从而提供显着更快的访问。总体而言,不要试图微观优化发动机已经推动信封尽可能高效的东西......
如果表是稀疏的(意味着它有很多(数百,数千)列中的每行都是NULL),那么你可以使用sparse columns。
从http://msdn.microsoft.com/en-us/library/aa224016(v=sql.80).aspx:
VARCHAR数据类型为可变长度的数据类型。值比列的尺寸较短 不正确填充到 科拉姆
VARCHAR只包含长度+内容的大小。
可为空的字段使用额外位来存储空/非空状态,因此记录本身不占用额外的空间。
感谢Remus。我故意用这个词稀疏。我很高兴知道在我的情况下,简单更好。 –