sp_spaceused空间不准?

时间:2023-02-14 15:30:35
create table TEST(ID INT ,ID2 INT)

alter table TEST ALTER COLUMN ID INT NOT NULL

ALTER TABLE TEST ADD CONSTRAINT PK_ID PRIMARY KEY(ID)

CREATE INDEX INDEX_ID2 ON TEST(ID2) 


declare @i int 
SELECT @i=1
while @i<10000
begin
INSERT INTO TEST values (@i,@i+1)
select @i=@i+1 
end 

sp_spaceused 'TEST'

--结果:
name rows reserved data index_size   unused
TEST 99999 3152 KB 1688 KB 1424 KB      40 KB

dbcc dbreindex(TEST,'',70)
sp_spaceused 'TEST'

name rows reserved data index_size    unused
TEST 99999 4416 KB 2400 KB 2008 KB       8 KB


为何重建索引后,索引的大小反而增大了,我觉得应该不会变大的啊!

请各位高手解答?

9 个解决方案

#1


dbcc dbreindex(TEST,'',70)

你的填充因子是70了吧

#2


哦 跟填充因子有关吗

#3


dbcc dbreindex(TEST,'',70)
和这个有关

#4


若不加 dbcc dbreindex(TEST,'',70) 

那平时的数据库索引重建,需要加吗?

#5


默认值80

#6


执行 DBCC UPDATEUSAGE(dbname) 语句更新 sysindexes 系统表上的存储信息,以使 sp_spaceused 获取准确的数据。这些信息在执行大量的修改操作后并不会被立即更新。

#7


提供填充因子选项是为了优化索引数据存储和性能。当创建或重新生成索引时,填充因子值可确定每个叶级页上要填充数据的空间百分比,以便保留一定百分比的可用空间供以后扩展索引。例如,指定填充因子的值为 80 表示每个叶级页上将有 20% 的空间保留为空,以便随着在基础表中添加数据而为扩展索引提供空间。

填充因子值是 1 到 100 之间的一个百分比。在大多数情况下,服务器范围的默认值 0 是最佳选项。如果将填充因子设置为 0,将几乎最大限度地填充叶级页,但是至少会留出再添加一个索引行的空间。使用此设置可有效使用叶级空间,但应保留一定的空间以便在不得不拆分页之前进行有限的扩展。

#8


EXEC sp_spaceused 'TEST','TRUE'

原来要这样,呵呵,我试了下小很多了

#9


sp_spaceused
显示行数、保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。

语法
sp_spaceused [[@objname =] 'objname']
    [,[@updateusage =] 'updateusage']

参数
[@objname =] 'objname'

是为其请求空间使用信息(保留和已分配的空间)的表名。objname 的数据类型是 nvarchar(776),默认设置为 NULL。

[@updateusage =] 'updateusage'

表示应在数据库内(未指定 objname 时)还是在特定的对象上(指定 objname 时)运行 DBCC UPDATEUSAGE。值可以是 true 或 false。updateusage 的数据类型是 varchar(5),默认设置为 FALSE。

#1


dbcc dbreindex(TEST,'',70)

你的填充因子是70了吧

#2


哦 跟填充因子有关吗

#3


dbcc dbreindex(TEST,'',70)
和这个有关

#4


若不加 dbcc dbreindex(TEST,'',70) 

那平时的数据库索引重建,需要加吗?

#5


默认值80

#6


执行 DBCC UPDATEUSAGE(dbname) 语句更新 sysindexes 系统表上的存储信息,以使 sp_spaceused 获取准确的数据。这些信息在执行大量的修改操作后并不会被立即更新。

#7


提供填充因子选项是为了优化索引数据存储和性能。当创建或重新生成索引时,填充因子值可确定每个叶级页上要填充数据的空间百分比,以便保留一定百分比的可用空间供以后扩展索引。例如,指定填充因子的值为 80 表示每个叶级页上将有 20% 的空间保留为空,以便随着在基础表中添加数据而为扩展索引提供空间。

填充因子值是 1 到 100 之间的一个百分比。在大多数情况下,服务器范围的默认值 0 是最佳选项。如果将填充因子设置为 0,将几乎最大限度地填充叶级页,但是至少会留出再添加一个索引行的空间。使用此设置可有效使用叶级空间,但应保留一定的空间以便在不得不拆分页之前进行有限的扩展。

#8


EXEC sp_spaceused 'TEST','TRUE'

原来要这样,呵呵,我试了下小很多了

#9


sp_spaceused
显示行数、保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。

语法
sp_spaceused [[@objname =] 'objname']
    [,[@updateusage =] 'updateusage']

参数
[@objname =] 'objname'

是为其请求空间使用信息(保留和已分配的空间)的表名。objname 的数据类型是 nvarchar(776),默认设置为 NULL。

[@updateusage =] 'updateusage'

表示应在数据库内(未指定 objname 时)还是在特定的对象上(指定 objname 时)运行 DBCC UPDATEUSAGE。值可以是 true 或 false。updateusage 的数据类型是 varchar(5),默认设置为 FALSE。