本文将了解SQL Server统计的基础知识和执行统计更新的各种方法。
什么是SQL Server统计信息?
SQL Server统计数据是大型二进制对象,用于保存表列中数值分布的统计信息。
SQL Server查询优化器使用统计数据来确定创建一个估计的cardinality。然后,cardinality值被用来创建一个优化和高质量的执行计划。
Cardinality指的是行的数量。
因此,保持SQL Server统计数据的更新是很重要的,因为不正确的统计结果可能导致昂贵的查询计划和高资源使用率。来自查询优化器的不良执行计划会导致一些问题,如阻塞和死锁。
什么是SQL Server执行计划?
执行计划或查询计划是指一系列有组织的步骤,以查询和访问数据库中的数据。查询优化器将生成一个高优化方法的图形表示,以获取指定查询的数据。
查看SQL服务器的统计数据
在SQL Server中,你可以使用SQL Server管理工作室或T-SQL查询来查看特定对象的统计数据。
在SSMS中,导航到数据库->你的目标数据库->表->目标表->统计
如图所示
要查看特定统计对象的细节,右键单击并选择属性选项。你可以查看列的统计数据最后一次被更新的时间为。
要查看柱状图的分布和频率,请使用属性窗口中的细节选项卡。
SQL服务器查看统计数据。Transact-SQL
你也可以使用T-SQL查询来查看统计数字的细节。考虑下图所示的查询示例。
use salesdb;
select
stats.name,
stats_properties.last_updated,
stats_properties.rows,
stats_properties.rows_sampled,
stats_properties.unfiltered_rows,
stats_properties.modification_counter,
stats_properties.steps
from sys.stats as stats
outer apply sys.dm_db_stats_properties(stats.object_id, stats.stats_id) as stats_properties
where object_name(stats.object_id) = 'Customers'
order by last_updated desc;
上面的查询应该返回一个例子的结果为:
SQL Server还提供了DBCC命令来显示特定统计量的细节。例如。
dbcc show_statistics ('Customers', 'CustomerPK');
上面的查询需要两个参数:表名和目标统计量,分别是:
SQL服务器更新统计数据
在SQL Server中,有多种方法来更新统计数据。要启用自动统计更新,请右键单击目标数据库,浏览选项选项卡,并在自动选项卡下将 "自动更新统计 "设置为true。
要使用T-SQL查询手动更新统计数据,使用如图所示的查询。
update statistics dbo.Customers;
其中dbo.Customers代表目标表。
你也可以使用update stats命令,如:
exec sp_updatestats;
输出如下。
结论
本指南涵盖了如何在SSMS和T-SQL中使用SQL Server统计信息和各种方法来执行统计信息更新。