0

我有以下表定义:

CREATE TABLE [dbo].[FillFactor](
    [FillFactorId] [int] NOT NULL,
    [Title] [varchar](50) NOT NULL
) ON [PRIMARY]

GO

表没有任何主键或索引。首先,我用虚拟数据填充表,然后执行程序sp_spaceused,其中我得到一行包含保留数据、索引数据等的一些值。

但是当我从表中删除所有行并执行sp_spaceused程序时,我得到以下结果:

在此处输入图像描述

为什么值 > 0?删除数据时存储空间发生了什么?谁能解释我这种情况?

谢谢!

4

2 回答 2

4

当您从数据库中删除行时,您正在清空分配给表的页面,在堆(没有聚集索引的表)中,如果没有排他表锁,则不能从表中取消分配任何页面如下所示的删除,您将在 sp_spaceused 结果中看到不同的结果:

DELETE FROM [dbo].[FillFactor] 
WITH
(
TABLOCK
)

您仍然可以在带有索引的表中找到空页,但这些通常会通过幽灵清理过程很快删除。

截断操作会立即从表中释放页面,而不是删除行并因此清空页面,因此在运行该命令后,您将看到 sp_spaceused 的所有零。

于 2013-09-18T10:49:12.387 回答
0

但是,如果您 TRUNCATE 表格,那么您将再次获得零。您会看到该表已填充的页面的开销,但您已使用 DELETE 语句清空。

于 2013-09-16T10:13:28.173 回答