在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% |
|
对于sys.dm_db_index_physical_stats的相关信息可以查看MSDN。
转载于:https://blog.51cto.com/shane/628541