SqlServer 使用sys.stats、sys.dm_db_stats_properties查看统计信息

本文介绍两种实用的SQL查询技巧,一是如何查看指定对象的所有统计信息,二是如何查找频繁修改的对象的统计信息。通过具体SQL语句示例,帮助读者理解和掌握如何在数据库中高效地获取对象的统计详情。

1、查看指定对象的所有统计信息

SELECT  name, sp.*  
FROM sys.stats AS stat   
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp  
WHERE stat.object_id = object_id('object_name');  

在这里插入图片描述

2、查找频繁修改的对象的统计信息

SELECT obj.name objname,obj.type,obj.type_desc,obj.schema_id,SCHEMA_NAME(obj.schema_id) [SCHEMA_NAME], obj.object_id, stat.name, last_updated, modification_counter  
FROM sys.objects AS obj   
INNER JOIN sys.stats AS stat ON stat.object_id = obj.object_id  
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp  
WHERE obj.type='U'
order by modification_counter desc

在这里插入图片描述

### SQL Server 统计信息概述 SQL Server 使用同步模式来更新统计信息。当查询优化器检测到过时的统计信息时,会先更新这些统计信息再准备执行计划[^1]。 对于性能问题排查而言,比较查询执行计划中的实际行数和估计行数是一项有效手段。两者之间存在显著差异可能意味着当前存储过程所依赖的基础表上的统计信息不够精确,进而影响整体效率表现[^2]。 为了确保数据库操作能够达到最优状态,保持最新且准确无误的数据分布描述至关重要;这不仅有助于提高读取速度,在写入方面同样有着积极意义。因为有了可靠的依据之后,SQL Server 才能在编译阶段制定出更合理的访问路径策略,从而减少不必要的资源消耗并加快响应时间[^4]。 #### 如何获取与维护统计信息? 可以通过多种方式管理和查看现有的统计对象: - **自动创建及更新**:默认情况下启用此功能允许系统自行决定何时建立新的索引或调整已有者的内容; - **手动干预措施**: - `UPDATE STATISTICS` 命令用于强制刷新特定列集上已有的元数据记录。 ```sql UPDATE STATISTICS schema.table_name; ``` - 查询动态管理视图 (DMV),如 sys.statssys.dm_db_stats_properties, 来评估现有状况以及识别潜在改进机会。 ```sql SELECT s.name AS stat_name, sp.last_updated, sp.rows_sampled, sp.modification_counter FROM sys.stats s CROSS APPLY sys.dm_db_stats_properties(s.object_id,s.stats_id) sp WHERE s.object_id = OBJECT_ID('schema.table_name'); ``` 此外,了解整个实例内各张表格占用磁盘空间的具体数值也是日常运维工作的一部分。利用如下脚本可以获得有关文件组分配给定范围内的总页数、保留字节数目等细节资料[^3]: ```sql USE YourDatabaseName; GO SELECT t.NAME AS TableName, SUM(a.total_pages) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB, (SUM(a.total_pages)-SUM(a.used_pages)) * 8 AS UnusedSpaceKB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id GROUP BY t.Name ORDER BY TotalSpaceKB DESC; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值