日期:2014-05-16 浏览次数:20474 次
SQL Server 重建索引|索引重组|索引的碎片检查 (SQL2005以上)
/********************************************************************************
*主题:SQL Server 重建索引|索引重组|索引的碎片检查 (SQL2005以上)
*说明:本文是个人学习的一些笔记和个人愚见
* 有很多地方你可能觉得有异议,欢迎一起讨论
*作者:Stephenzhou(阿蒙)
*日期: 2012.08.24
*Mail:szstephenzhou@163.com
*另外:转载请著名出处。
**********************************************************************************/
什么是索引碎片呢?
由于表上有过度地插入、修改和删除操作,索引页被分成多块就形成了索引碎片,如果索引碎片严重,那扫描索引的时间就会变长,甚至导致索引不可用,因此数据检索操作就慢下来了。
检查索引碎片
SELECT OBJECT_NAME(dt.object_id) ,
si.name ,
dt.avg_fragmentation_in_percent,
dt.avg_page_space_used_in_percent
FROM
(SELECT object_id ,
index_id ,
avg_fragmentation_in_percent,
avg_page_space_used_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, 'DETAILED')
WHERE index_id <> 0
) AS dt --does not return information about heaps
INNER JOIN sys.indexes si
ON si.object_id = dt.object_id
AND si.index_id = dt.index_id
执行结果如下:

/*
avg_fragmentation_in_percent avg_page_space_used_in_percent
-------------------------------------------------------- ---------- ---------------------------- ------------------------------
consume_vewt01 pk_Aount 0 0
tb_Security PK__tb_Sec 0 0
tb1 PK__tb1__3 0 1.54435384235236
tb1 PK__tb1__3 50 70.5831480108723
tb1 PK__tb1__3 0 0.296515937731653
tb1 PK__tb1__3 0 1.54435384235236
tb1 PK__tb1__3 0 1.54435384235236
consume_vewt02 pk_Aount2 0 3.26167531504818
consume_vewt03 pk_Aount3 0 0.76599950580677
consume_vewt04 pk_Aount4 0 0
sysarticles c1sysartic 0 30.5782060785767
sys