首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重组索引和碎片整理级别

重组索引和碎片整理级别
EN

Stack Overflow用户
提问于 2012-09-13 19:14:05
回答 2查看 812关注 0票数 0

我找到了这个问题here,但还没有答案:

如果索引严重碎片化(超过50 %),alter index reorganize会降低碎片化程度吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-13 20:09:40

是的,它会的--但只是在一定程度上。Index reorg仅对索引的叶级页面进行混洗,并将尝试压缩这些页面-但它不会完全重建索引结构。因此,它可以消除一些碎片-但仅限于有限的规模。

这就是为什么根据经验,对于大于30%的碎片(或者你可能想选择一个不同的阈值,比如25%,取决于你的情况),你应该rebuild索引-而不仅仅是reindex。Rebuild还会更新统计信息,这对于良好的查询计划至关重要。

票数 1
EN

Stack Overflow用户

发布于 2012-09-13 20:26:16

这取决于片断提及的性质,即它是否会。

Reorganize不会分配新的页面,因此不能删除由于非邻接区而产生的碎片。它是通过交换页面来工作的。即,它确定属于叶级的第一物理页和叶级中的第一逻辑页,并且如果它们不同,则交换内容。

如果我尝试以下操作,我会发现重组将碎片从99.9%降低到0.9%

代码语言:javascript
复制
CREATE TABLE T( [ID] [int] IDENTITY NOT NULL,
                 [Filler] [char](8000) NULL,
                 PRIMARY KEY CLUSTERED ([ID] DESC))

GO

INSERT INTO T DEFAULT VALUES
GO 1000

SELECT object_name(object_id) AS name, 
       page_count, 
       avg_fragmentation_in_percent, 
       fragment_count, 
       avg_fragment_size_in_pages 
FROM 
sys.dm_db_index_physical_stats(db_id(), object_id('T'), 1, NULL, 'DETAILED') 
WHERE  index_level = 0 


SET STATISTICS IO ON;
ALTER INDEX ALL ON T
REORGANIZE ; 

SELECT object_name(object_id) AS name, 
       page_count, 
       avg_fragmentation_in_percent, 
       fragment_count, 
       avg_fragment_size_in_pages 
FROM 
sys.dm_db_index_physical_stats(db_id(), object_id('T'), 1, NULL, 'DETAILED') 
WHERE  index_level = 0 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12404991

复制
相关文章

相似问题

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