2013-01-07 87 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只包含長度+內容的大小。

可爲空的字段使用額外位來存儲空/非空狀態,因此記錄本身不佔用額外的空間。