Sql-Server

SQL Server 表在架構更改後保持很大

  • January 18, 2013

我在 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 無論如何都很大……

引用自:https://dba.stackexchange.com/questions/33142