mssql sql server动态存储过程 sys.dm_db_index_physical_stats 功能简介


sys.dm_db_index_physical_stats 动态存储过程功能简介

此动态存储过程的功能为 返回指定表或视图的数据及索引大小及碎片信息,


函数样式:

sys.dm_db_index_physical_stats (
{database_id | NULL }
, { object_id | NULL }
, { index_id | NULL | 0 }
, { partition_number | NULL }
, { mode | NULL | DEFAULT }
)

参数说明:
database_id:查看索引情况所在的数据库Id
objectId:待查看的表或视图Id
index_id:索引Id,索引在数据库中的编号
partition_number:分区号
mode:(LIMITED SAMPLED DETAILED) -获取索引的方式

LIMITED:模式运行最快,扫描的页数最少 对于堆 -它将扫描所有页 对于索引-则只扫描叶级上面的父级别页
SAMPLED:模式将返回基于索引或堆中所有页的 1% 样本的统计信息。如果索引或堆少于 10000 页,则使用DETAILED模式代替 SAMPLED
DETAILED:模式将扫描所有页并返回所有统计信息


返回值说明:
database_id:数据库Id
object_id:表Id
index_id:索引Id
partition_number:索引所在分区号
index_type_desc:索引类型
alloc_unit_type_desc:分配单元
avg_fragmentation_in_percent:索引碎片占比,大于百分之30,请重新建立索引


例:
返回指定表的索引碎片

 DECLARE @db_id SMALLINT;
DECLARE @object_id INT;

SET @db_id = DB_ID();
SET @object_id = OBJECT_ID(N'表名');

IF @db_id IS NULL
BEGIN;
    PRINT N'无效的数据库';
END;
ELSE IF @object_id IS NULL
BEGIN;
    PRINT N'无效的对象';
END;
ELSE
BEGIN;
    SELECT * FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL , 'LIMITED');
END;
GO