我对根据sys.dm_db_index_physical_statsdm 函数返回的 avg_fragmentation_in_percent 选择索引重组/重建索引感到困惑。
Msdn 说:
而且,avg_fragmentation_in_percentvalue 表示索引中存在的逻辑碎片百分比(这是索引的叶页中乱序页的百分比)。
Reorganize of index将始终修复页面的物理顺序。所以即使 avg_fragmentation_in_percent 大于 30% 我也可以考虑重新组织索引。它将减少索引中的碎片百分比。
请看下面的例子
SELECT
database_id, object_id,
avg_fragmentation_in_percent,
avg_page_space_used_in_percent,
page_count,
avg_fragment_size_in_pages
FROM
SYS.Dm_db_index_physical_stats (Db_id('BPIGTN_GAL_APP_TST'), Object_id('NM_PPA_PROJECTION_MASTER'), NULL, NULL, 'SAMPLED')
Run Code Online (Sandbox Code Playgroud)
结果
Database_id Object_id avg_fragmentation_in_percent avg_page_space_used_in_percent page_count avg_fragment_size_in_pages
37 913490383 99.36 60.15 314 1.003
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我们可以看到 99% 的平均值,fragmentation这意味着索引有更多的逻辑碎片(页面无序更多)。
所以我要重新组织我们在上图中看到的索引。
请查看下面的示例以进一步了解。
ALTER INDEX PK_NM_PPA_PROJECTION_MASTER_PROJECTION_DETAILS_SID_RS_CONTRACT_SID ON NM_PPA_PROJECTION_MASTER REORGANIZE
GO
SELECT database_id,
object_id,
avg_fragmentation_in_percent,
avg_page_space_used_in_percent,
page_count,
avg_fragment_size_in_pages
FROM SYS.Dm_db_index_physical_stats (Db_id('BPIGTN_GAL_APP_TST'), Object_id('NM_PPA_PROJECTION_MASTER'), NULL, NULL, 'SAMPLED')
Run Code Online (Sandbox Code Playgroud)
结果
Database_id Object_id avg_fragmentation_in_percent …Run Code Online (Sandbox Code Playgroud)