我有下面的表定义:
CREATE TABLE [dbo].[FillFactor](
[FillFactorId] [int] NOT NULL,
[Title] [varchar](50) NOT NULL
) ON [PRIMARY]
GO表没有任何主键或索引。首先,我用虚拟数据填充表,然后执行过程sp_spaceused,其中我得到一行,其中包含保留数据、索引数据等的一些值。
但是当我从表中删除所有行并执行sp_spaceused过程时,我得到了以下结果:

为什么值大于0?删除数据时,存储空间发生了什么变化?有人能给我解释一下这种情况吗?
谢谢!
发布于 2013-09-18 18:49:12
当您从数据库中删除行时,您正在清空分配给表的页,在堆(没有聚集索引的表)中,如果没有独占表锁,则不能从表中释放任何页,如果您执行了如下所示的删除操作,您将在sp_spaceused结果中看到不同的结果:
DELETE FROM [dbo].[FillFactor]
WITH
(
TABLOCK
)您仍然可以在带有索引的表中获得挂起的空页,但这些空页通常会被虚拟清理过程很快删除。
truncate操作立即从表中释放页面,而不是删除行,从而清空页面,因此在运行该命令后,您将看到sp_spaceused为全零。
发布于 2013-09-16 18:13:28
但是如果你截断这个表,那么你会再次得到零。您看到的是该表填充的页面的开销,但是使用DELETE语句将其清空。
https://stackoverflow.com/questions/18825090
复制相似问题