我找到了这个问题here,但还没有答案:
如果索引严重碎片化(超过50 %),alter index reorganize会降低碎片化程度吗?
发布于 2012-09-13 20:09:40
是的,它会的--但只是在一定程度上。Index reorg仅对索引的叶级页面进行混洗,并将尝试压缩这些页面-但它不会完全重建索引结构。因此,它可以消除一些碎片-但仅限于有限的规模。
这就是为什么根据经验,对于大于30%的碎片(或者你可能想选择一个不同的阈值,比如25%,取决于你的情况),你应该rebuild索引-而不仅仅是reindex。Rebuild还会更新统计信息,这对于良好的查询计划至关重要。
发布于 2012-09-13 20:26:16
这取决于片断提及的性质,即它是否会。
Reorganize不会分配新的页面,因此不能删除由于非邻接区而产生的碎片。它是通过交换页面来工作的。即,它确定属于叶级的第一物理页和叶级中的第一逻辑页,并且如果它们不同,则交换内容。
如果我尝试以下操作,我会发现重组将碎片从99.9%降低到0.9%
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 https://stackoverflow.com/questions/12404991
复制相似问题