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

时间:2015-03-18 23:27:14

标签: sql-server database

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

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

ALTER TABLE myHeap REBUILD;

对于聚簇索引:

ALTER INDEX IX_myIndex ON myTable REBUILD;

我有两个问题:

1)通过索引重建,删除列以前使用的空间是否会被释放?

2)如果我在群集表上调用ALTER TABLE myHeap REBUILD;会怎样?我尝试了它似乎工作,但这相当于写ALTER INDEX IX_myIndex ON myTable REBUILD;?或者有什么区别?

2 个答案:

答案 0 :(得分:1)

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

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

  1. 创建新表
  2. 使用此旧表中的数据填充该表。
  3. 放下旧桌子。
  4. 将New表重命名为Old table。
  5. 在新表上创建索引。
  6. 根据我的经验,一旦blob数据类型使用空间,释放空间绝不是一项简单易行的任务,除非您删除并创建表。

    重要提示

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

答案 1 :(得分:0)

当您使用聚簇索引重建表时,它会自动重建聚簇索引(聚簇索引就是表)。

请参阅此处的文档...... https://msdn.microsoft.com/en-us/library/ms190273.aspx

  

REBUILD使用REBUILD WITH语法重建整个表   包括分区表中的所有分区。如果表有   在聚簇索引中,REBUILD选项会重建聚簇索引。   REBUILD可以作为在线操作执行。