-
概述
对于数据库的索引,最典型的描述,便是以书本的目录为比喻了.在许多场景下,使用索引,可以帮助程序更加快速地定义到需要的所需的数据.
然而,对于数据库而言而言.数据表的记录并不会一层不变,可以通过许多途径对表数据进行插入、更新、删除等操作。表数据的这些操作,以数据为依据的索引,在数据更新的过程中,同样需要做到与数据的更新同步(当然,还包括一些统计信息等数据库内部评估使用的信息的自动更新等)。当索引的节点在数据插入,删除或者更新的时候,需要在索引结构中按其排列顺序进行节点位置的更新,数据库为了确保更快速地更新索引,使用最快速的算法进行索引信息的同步,即,对索引页中数据的移动,在索引页空间不足的情况下,还需要对索引页进行拆分,从而造成了许多索引碎片。
-
分析
索引碎片的分析,在SQL Sever 2000中,保罗大师为我们提供了DBCC SHOWCONTIG工具。因为现在基本上使用的是SQL Server 2005,所以就使用保罗提供的另外一个更好用的工具DMV sys.dm_db_index_physical_stats进行分析。
select ix.name,--索引名称 ps.index_type_desc,--索引类型 alloc_unit_type_desc,--存储单元类型(行内数据,溢出行,大数据行) index_depth,--索引深度 avg_fragmentation_in_percent,--索引碎片的百分比,>=30,便需要考虑重建索引 avg_fragment_size_in_pages--索引碎片在索引页中的数量 from sys.dm_db_index_physical_stats(db_id('DbName'),object_id('TableName'),null,null,'Sampled') ps join sys.indexes ix on ps.[object_id] = ix.[object_id] and ps.index_id = ix.index_id如下图中所示, 是一个简单表的示例.