2014-09-06 104 views
2

NULL值大小的主題已在許多主題(如this one in SO)中討論過。

我可以明白,如果該行是固定尺寸的,intvarchar(x) NULL valeus(如果屬性是int或空格如果屬性是varchar(x)零)爲NULL位圖+ 1字節取空間。
SQL Server 2014 - varchar(x)NULL大小

我創建了一個具有兩個屬性的表格:
CREATE TABLE Person (id int NULL, name VARCHAR(50) NULL)

和所使用的script here以獲取每一行B中的大小:

enter image description here

我可以從表中讀取這些事實:
- 前三行:每每個字母1個字節+ 1位爲NULL位圖。
- 第4行:2個NULL位圖。
- 最後兩行:NULL位圖的4個字節+ 1個字節。

爲什麼上面的int/varchar(50)NULL值沒有取所有聲明的大小?

我正在使用SQL Server Management Studio 2014.規範是否更改?

回答

3
  1. 您使用的腳本是錯誤的。使用datalength()將不會檢索物理長度。
  2. 您的期望不正確。可變長度字段對於NULL不需要「空格」,實際上整數也可能不需要0,這取決於行壓縮。

使用sys.dm_db_index_physical_stats檢索min_record_size_in_bytesmax_record_size_in_bytesavg_record_size_in_bytes。有關記錄大小的解釋,請參閱SQL Server table columns under the hoodInside the Storage Engine: Anatomy of a record。閱讀Row Compression Implementation以更好地理解一些替代方案。

+0

我混合字符與varchar。多麼糟糕!感謝您的確認和鏈接。 – Infogeek 2014-09-06 16:44:15