3

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

或者如果 Varchar(max) 字段包含 null,它不会占用大量空间吗?

4

2 回答 2

7

否。SQL Server 已经为 BLOB 类型使用了单独的分配单元,请参阅表和索引组织。NULL 值在一行中只占用一位,请参阅记录剖析

通过创建单独的表会浪费更多空间,并且检查列是否为 NULL 或具有值的成本要高得多。此外,列值可以针对较小的值进行优化和拉入行内,如果它们适合,提供显着更快的访问。总的来说,不要试图对引擎已经在推动极限的东西进行微优化,以使其尽可能高效......

如果是稀疏的(这意味着它有许多(数百、数千)列,其中每行中有许多为 NULL),那么您可以使用sparse columns

于 2013-01-07T18:59:21.747 回答
3

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

varchar 数据类型是可变长度数据类型。小于列大小的值不会右填充到列大小

varchar 仅包含长度 + 内容。

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

于 2013-01-07T18:59:25.003 回答