我发现了这个问题here但尚无答案:
如果索引严重碎片化(超过50%),alter index reorganize
会降低碎片级别吗?
答案 0 :(得分:1)
这就是为什么根据经验,碎片大于30%(或者你可能想要选择不同的阈值,如25%,取决于你的位置),你应该重建 index - 不仅仅是reindex。重建还会更新对良好查询计划至关重要的统计信息。
答案 1 :(得分:1)
这取决于是否存在的碎片的性质。
重新组织不会分配新页面,因此无法删除由于不连续的扩展区而发生的碎片。它通过交换页面来工作。即它确定属于叶级别的第一个物理页面和叶级别中的第一个逻辑页面,如果它们不同则交换内容。
如果我尝试以下操作,我会看到重组会将碎片从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