Sql-Server

刪除固定長度的列以釋放空間是否明智?

  • October 18, 2016

我在 SQL Server 2005 中有一個巨大的表。(表大約 40gb)我正在尋找最安全、最輕鬆的方法來釋放空間或延遲其增長。

該表具有三個固定長度 ( char(10)) 列,它們 a) 完全不需要,b) 幾乎完全填充NULL

如果我刪除這些列,SQL Server 會在導入新記錄時開始使用數據文件中的釋放空間嗎?或者由於分散在許多記錄上,它們的碎片性質(我假設)是否意味著 SQL Server 將出於性能原因忽略空間?

如果我刪除它們,我可以執行收縮數據庫來釋放空間嗎?

我是唯一使用這個數據庫的開發人員,我知道這些列對於需求來說是多餘的。15 年前,當不同的懶惰開發人員創建此數據庫時,它們與其他列一起添加到平面文件中。

  1. 如果您重建索引或執行 DBCC CLEANTABLE,刪除它們將回收空間
  2. 新行將沒有這些列
  3. 無論是否為 NULL,固定長度列始終保留空間(注意:具有 NULL 的可變長度列通常不佔用空間)
  4. 不要收縮數據庫,它只會再次增長並有其他問題(超出範圍)
  5. 40GB不算大

注意:用於回收空間的索引重建假設您有一個聚集索引

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