1

我有一個SQL Server中的uniqueidentifier字段(準確的說是SQL Azure),我想擺脫它。最初,當我運行SQL Azure table size中提到的代碼來確定表的大小時,大約爲0.19 MB。sql azure設置值爲null增加表大小

作爲第一步,我將uniqueidentifier字段中的所有值設置爲null。沒有使用該列的約束/索引。現在,當我運行代碼來確定表格大小時,表格大小增加到大約0.23 MB。沒有記錄被添加到表(它在臨時環境中)。

我繼續刪除列,它仍然在相同的範圍內徘徊。 爲什麼我刪除一列時數據庫大小會增加。有什麼建議麼?

回答

1

uniqueidentifier列設置爲NULL值不會以任何方式更改記錄大小,因爲它是固定大小類型(16字節)。刪除固定大小的列列不會更改記錄大小,除非是物理佈局中的最後一列,並且以後可以重新使用該空間。 ALTER TABLE ... DROP COLUMN只是一個邏輯操作,它只是將列標記爲已刪除,請參閱SQL Server Columns Under the Hood

爲了回收需要刪除列的空間,然後重建表的聚簇索引,請參見ALTER INDEX ... REBUILD

對於獨立SQL Server SHRINK中的記錄(因爲SQLRING中不允許使用SHRINK)將不會解決任何問題,這不是關於頁面預留,而是關於物理記錄大小。

0

它正在計算保留頁面的數量來計算大小。刪除列可能會減少實際用於存儲數據的頁面數量,但新釋放的頁面可能仍保留供將來插入。

我想你需要收縮數據庫看到大小減小,按:http://social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/ae698613-79d5-4f23-88b4-f42ee4b3ad46/

順便說一句,我相當確信,設置非可變長度列的值(如一個GUID)爲空將不會節省您任何空間 - 只有刪除列纔會這樣做。每Space used by nulls in database