sp_updatestats (Transact-SQL)

适用于: SQL Server Azure SQL 数据库

针对当前数据库中的所有用户定义的表和内部表运行 UPDATE STATISTICS

有关详细信息 UPDATE STATISTICS,请参阅 UPDATE STATISTICS。 有关统计信息的详细信息,请参阅统计信息

Transact-SQL 语法约定

语法

sp_updatestats [ [ @resample = ] 'resample' ]

返回代码值

0(成功)或 1(失败)。

参数

[ @resample = ] 'resample'

指定sp_updatestats使用 UPDATE STATISTICS 语句的选项RESAMPLE。 如果未 resample 指定, sp_updatestats 请使用默认采样更新统计信息。 参数 resamplevarchar(8), 默认值为 NO.

注解

sp_updatestatsUPDATE STATISTICS通过在数据库中的所有用户定义表和内部表上指定ALL关键字来执行。 sp_updatestats 显示指示其进度的消息。 更新完成后,它会报告所有表的统计信息已更新。

sp_updatestats 更新已禁用的非聚集索引的统计信息,并且不会更新已禁用聚集索引的统计信息。

对于基于磁盘的表,sp_updatestats根据modification_countersys.dm_db_stats_properties目录视图中的信息更新统计信息,更新至少修改了一行的统计信息。 执行 sp_updatestats时,始终更新内存优化表的统计信息。 因此,不要执行 sp_updatestats 超过必要的执行。

sp_updatestats 可以触发存储过程或其他已编译代码的重新编译。 但是, sp_updatestats 如果只有一个查询计划可用于引用的表及其上的索引,则可能不会导致重新编译。 在这些情况下,即便更新了统计信息也不必进行重新编译。

sp_updatestats 保留特定统计信息的最新 NORECOMPUTE 选项。 有关禁用和重新启用统计信息更新的详细信息,请参阅统计信息

将数据库从以前的版本还原到 SQL Server 2022 (16.x),应对数据库执行 sp_updatestats 。 这与为 SQL Server 2022(16.x)中引入的 统计信息自动删除功能 设置适当的元数据相关。 自动删除功能在 Azure SQL 数据库、Azure SQL 托管实例 以及从 SQL Server 2022(16.x)开始提供。

权限

对于 SQL Server,必须是数据库(dbo)的所有者或 sysadmin 固定服务器角色的成员

对于Azure SQL 数据库,必须是db_owner固定数据库角色的成员

示例

以下示例更新数据库的所有表的统计信息:

USE AdventureWorks2022;
GO
EXEC sp_updatestats;

自动索引和统计信息管理

使用自适应索引碎片整理等解决方案,自动管理一个或多个数据库的索引碎片整理和统计信息更新。 此过程根据碎片级别以及其他参数,自动选择是重新生成索引还是重新组织索引,并使用线性阈值更新统计信息。