如何重建表以释放已删除的旧列所使用的空间

edu*_*edu 5 database sql-server

我有一个 MSSQL 聚集索引,我想重建它,因为我删除了一些列并且我想释放空间。

在文献中,我读到,对于堆,你可以写

ALTER TABLE myHeap REBUILD;
Run Code Online (Sandbox Code Playgroud)

对于聚集索引:

ALTER INDEX IX_myIndex ON myTable REBUILD;
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

1)重建索引后,之前被删除的列使用的空间会被释放吗?

ALTER TABLE myHeap REBUILD;2)如果我调用聚簇表会发生什么?我尝试了一下,似乎可行,但这相当于写作吗ALTER INDEX IX_myIndex ON myTable REBUILD;?或者说有什么区别?

M.A*_*Ali 2

如果您删除的列不是任何 blob 数据类型,那么您尝试执行的操作应该有效。

但是,如果您拥有 dropper 的任何列都是 blob 数据类型(text、ntext、n\varchar(max)、xml),那么释放空间的最佳方法是

  1. 创建一个新表
  2. 使用此旧表中的数据填充该表。
  3. 删除旧表。
  4. 将新表重命名为旧表。
  5. 在新表上创建索引。

根据我的经验,释放 blob 数据类型曾经使用的空间从来都不是一件简单而容易的任务,除非您删除并创建表。

重要的提示

用户的任何表特定权限都将丢失,因此在删除和创建对象时要小心。