2013-01-07 36 views
2

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

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

回答

5

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

您将通过创建单独的表来浪费更多空间,并且检查列是否为NULL或具有值将花费更高的代价。除此之外,列值可以被优化,并且如果它们适合的话,可以小的值在行内拉动,从而提供显着更快的访问。总体而言,不要试图微观优化发动机已经推动信封尽可能高效的东西......

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

+0

感谢Remus。我故意用这个词稀疏。我很高兴知道在我的情况下,简单更好。 –

2

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

VARCHAR数据类型为可变长度的数据类型。值比列的尺寸较短 不正确填充到 科拉姆

VARCHAR只包含长度+内容的大小。

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