sp_updatestats (Transact-SQL)
适用于: SQL Server Azure SQL 数据库
针对当前数据库中的所有用户定义的表和内部表运行 UPDATE STATISTICS
。
有关详细信息 UPDATE STATISTICS
,请参阅 UPDATE STATISTICS。 有关统计信息的详细信息,请参阅统计信息。
语法
sp_updatestats [ [ @resample = ] 'resample' ]
返回代码值
0
(成功)或 1
(失败)。
参数
[ @resample = ] 'resample'
指定sp_updatestats
使用 UPDATE STATISTICS 语句的选项RESAMPLE
。 如果未 resample
指定, sp_updatestats
请使用默认采样更新统计信息。 参数 resample
为 varchar(8), 默认值为 NO
.
注解
sp_updatestats
UPDATE STATISTICS
通过在数据库中的所有用户定义表和内部表上指定ALL
关键字来执行。 sp_updatestats
显示指示其进度的消息。 更新完成后,它会报告所有表的统计信息已更新。
sp_updatestats
更新已禁用的非聚集索引的统计信息,并且不会更新已禁用聚集索引的统计信息。
对于基于磁盘的表,sp_updatestats
根据modification_counter
sys.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;
自动索引和统计信息管理
使用自适应索引碎片整理等解决方案,自动管理一个或多个数据库的索引碎片整理和统计信息更新。 此过程根据碎片级别以及其他参数,自动选择是重新生成索引还是重新组织索引,并使用线性阈值更新统计信息。