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了吧
你的填充因子是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,将几乎最大限度地填充叶级页,但是至少会留出再添加一个索引行的空间。使用此设置可有效使用叶级空间,但应保留一定的空间以便在不得不拆分页之前进行有限的扩展。
填充因子值是 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了吧
你的填充因子是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,将几乎最大限度地填充叶级页,但是至少会留出再添加一个索引行的空间。使用此设置可有效使用叶级空间,但应保留一定的空间以便在不得不拆分页之前进行有限的扩展。
填充因子值是 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。