![SQL Server 巨大的无行表](https://linux22.com/image/499871/SQL%20Server%20%E5%B7%A8%E5%A4%A7%E7%9A%84%E6%97%A0%E8%A1%8C%E8%A1%A8.png)
我有一个 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 约束引用的表起作用。
答案3
如果数据库包含多行数据,那么这些数据将从表中删除,数据库引擎不会缩小文件。有命令可以做到这一点,我必须查找它们。
更新:我过去使用过的一个是 DBCC SHRINKDATABASE,你可以在 TechNet 上找到详细信息这里
答案4
这有点奇怪但是有效:
插入一个虚拟列作为表格的第一列,然后保存该表格。
最后,删除新列并再次保存表格。
现在你肯定会使用0个字节。
诺埃尔·帕里科洛