我有一個很少使用的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。我故意用這個詞稀疏。我很高興知道在我的情況下,簡單更好。 –