首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当表为空时,为什么sp_spaceused显示非零结果?

当表为空时,为什么sp_spaceused显示非零结果?
EN

Stack Overflow用户
提问于 2013-09-16 17:53:47
回答 2查看 320关注 0票数 0

我有下面的表定义:

代码语言:javascript
复制
CREATE TABLE [dbo].[FillFactor](
    [FillFactorId] [int] NOT NULL,
    [Title] [varchar](50) NOT NULL
) ON [PRIMARY]

GO

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

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

为什么值大于0?删除数据时,存储空间发生了什么变化?有人能给我解释一下这种情况吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-09-18 18:49:12

当您从数据库中删除行时,您正在清空分配给表的页,在堆(没有聚集索引的表)中,如果没有独占表锁,则不能从表中释放任何页,如果您执行了如下所示的删除操作,您将在sp_spaceused结果中看到不同的结果:

代码语言:javascript
复制
DELETE FROM [dbo].[FillFactor] 
WITH
(
TABLOCK
)

您仍然可以在带有索引的表中获得挂起的空页,但这些空页通常会被虚拟清理过程很快删除。

truncate操作立即从表中释放页面,而不是删除行,从而清空页面,因此在运行该命令后,您将看到sp_spaceused为全零。

票数 4
EN

Stack Overflow用户

发布于 2013-09-16 18:13:28

但是如果你截断这个表,那么你会再次得到零。您看到的是该表填充的页面的开销,但是使用DELETE语句将其清空。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18825090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档