如何更新SQL服务器的统计数据

101 阅读2分钟

本文将了解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统计信息和各种方法来执行统计信息更新。