在SQL SERVER 2000时,如果想要查看某个索引的碎片情况我们用的是如下的命令:DBCC SHOWCONTIG('Tname', 'IndexName'),根据扫描结果中的:扫描密度 [最佳计数:实际计数]的具体结果来进行判断该索引是否需要重新组织或重建。

SQL Server 2005中又新增了个系统函数来查询索引的信息,其精确率比DBCC SHOWCONTIG更高。

实例:

--库名:phonesale,表名:tblsaleinfo

DECLARE @db_id SMALLINT;
DECLARE @object_id INT;

SET @db_id = DB_ID(N'phonesale');
SET @object_id = OBJECT_ID(N'phonesale.dbo.tblsaleinfo');

IF @db_id IS NULL
BEGIN;
    PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
    PRINT N'Invalid object';
END;
ELSE
BEGIN;
    SELECT * FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL , 'LIMITED')
END;
GO

 

显示的结果中avg_fragmentation_in_percent字段表示逻辑碎片(索引中的无序页)的百分比,可以参考该列的值来决定是否需要重新组织或重建索引。

 

avg_fragmentation_in_percent 值修复语句

> 5% 且 < = 30%

ALTER INDEX REORGANIZE

> 30%

ALTER INDEX REBUILD WITH (ONLINE = ON)*

 对于sys.dm_db_index_physical_stats的相关信息可以查看MSDN。