Sql-Server
SQL Server 表在架構更改後保持很大
我在 SQL Server 2012 中有一個包含 460.000 行的表。
該表具有以下架構:
我們的應用程序有問題,所以所有 500.000 行都是
Comments
用空格填充的。這導致表大小約為 3.7GB:
在此之後,我執行了以下操作來修復結尾空格,但數據庫保持在 3.7GB。
update voucher set comments = ltrim(rtrim(comments))
一個快速的計算告訴我,一個完全填滿的行大約有 280 個字節的原始數據,一個空行(所有 varchars 都是空的)有 32 個字節。
這意味著對於 460.000 行,我的表應該在 32MB-122MB 之間。
為什麼表是 3.7GB?如何回收空間?
您的行適合頁面,即使
Comments
. 將 更新Comments
為 ltrim(rtrim)) 絕對不會改變使用的空間,因為行將保留在它們各自的頁面中(即絕對沒有頁面被釋放,您只需在每個頁面上獲得更多可用空間)。要回收失去的空間,您應該重建表:ALTER TABLE ... REBUILD;
並不是說 3.7Gb 無論如何都很大……