SQL优化:索引碎片

通过函数 sys.dm_db_index_physical_stats

(db_id('wcc'),   --数据库id
    null,           --对象id:数据库名称.架构.对象名称
    null,           --索引id
    null,           --分区号
    ''              --模式
   )

可以查看索引碎片的具体情况。


所有的参数都是以当前数据库来计算的,所以必须指定完全限定。

模式影响如何收集碎片数据:
1、LIMITED:扫描堆所有的页,对于索引,只扫描叶级别上面的父级别页
2、SAMPLED:收集堆或索引中1%采样率的数据
3、DETAILED:扫描所有页,最精确但速度最慢

定null或default时,等同于limited模式。
 

代码如下:


select 
	DB_NAME(d.database_id),
    OBJECT_NAME(d.object_id),
    
    i.name,        --索引名称
    d.index_type_desc,
    d.alloc_unit_type_desc,
    
    d.index_depth,  --索引的深度
    d.index_level,  --索引当前级别
    
    --索引的逻辑碎片,或 IN_ROW_DATA 分配单元中堆的区碎片
    d.avg_fragmentation_in_percent,
    
    --IN_ROW_DATA分配单元的叶级别中的碎片数
    d.fragment_count,
    
    --IN_ROW_DATA 分配单元的叶级别中的一个碎片的平均页数
    d.avg_fragment_size_in_pages,
    
    --对于索引,平均百分比应用于 IN_ROW_DATA 分配单元中 b 树的当前级别
    --对于堆,表示 IN_ROW_DATA 分配单元中所有数据页的平均百分比
    d.avg_page_space_used_in_percent,
    
    d.page_count,               --索引或数据页的总数
    d.record_count,             --总记录数
    d.min_record_size_in_bytes, --最小记录大小(字节)
    d.max_record_size_in_bytes, --最大记录大小(字节)
    d.avg_record_size_in_bytes, --平均记录大小(字节)
    
    --压缩页的数目
    d.compressed_page_count,    
    --分配单元中将被虚影清除任务删除的虚影记录数
    d.ghost_record_count,
    --由分配单元中未完成的快照隔离事务保留的虚影记录数
    d.version_ghost_record_count,
    --堆中具有指向另一个数据位置的转向指针的记录数
    d.forwarded_record_count  
       
from sys.dm_db_index_physical_stats
   (db_id('wcc'),   --数据库id
    null,           --对象id:数据库名称.架构.对象名称
    null,           --索引id
    null,           --分区号
    ''              --模式
   )d
inner join sys.indexes i
        on d.object_id = i.object_id
           and d.index_id = i.index_id

 

你可能感兴趣的:(【SQL优化】)