SQL Server 巨大的无行表

SQL Server 巨大的无行表

我有一个 SQL Server 数据库,其中有几个表的行数为零,但总共占用了 10 GB 的空间。我可以通过右键单击相关表/属性来看到这一点(数据空间很大,介于 1 到 6 GB 之间,这些表上的行数为零)。我不知道是什么原因造成的,因为我认为零行意味着几乎不占用任何空间。

有任何想法吗?

答案1

重建表上的所有索引,包括聚集索引。从联机图书

重建索引会删除并重新创建索引。这会删除碎片,通过根据指定或现有的填充因子设置压缩页面来回收磁盘空间,并重新排列连续页面中的索引行。

就像是:

ALTER INDEX ALL ON [lc_db_user].[JMS_MESSAGES] REBUILD

DBCC SHRINKDATABASE 或(更推荐)DBCC SHRINKFILE 仅在空间已从表本身释放时才会执行某些操作。另外,请确保您熟悉与缩小数据库文件相关的问题. 执行摘要:切勿使用自动收缩,仅在必要时收缩文件,并且始终进行完整的重新索引,以整理您刚刚碎片化的所有索引。

答案2

处理此类问题的另一种方法是使用 TRUNCATE TABLE 语句:

TRUNCATE TABLE [lc_db_usr].[JMS_MESSAGES]

但这只对未被 FOREIGN KEY 约束引用的表起作用。

更多细节:http://msdn.microsoft.com/en-us/library/ms177570.aspx

答案3

如果数据库包含多行数据,那么这些数据将从表中删除,数据库引擎不会缩小文件。有命令可以做到这一点,我必须查找它们。

更新:我过去使用过的一个是 DBCC SHRINKDATABASE,你可以在 TechNet 上找到详细信息这里

答案4

这有点奇怪但是有效:

插入一个虚拟列作为表格的第一列,然后保存该表格。

最后,删除新列并再次保存表格。

现在你肯定会使用0个字节。

诺埃尔·帕里科洛

相关内容