更新统计信息
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
你可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中为表或索引视图更新查询优化统计信息。 默认情况下,查询优化器已根据需要更新统计信息以改进查询计划;但在某些情况下,可以通过使用 UPDATE STATISTICS
或存储过程 sp_updatestats
来比默认更新更频繁地更新统计信息,提高查询性能。
更新统计信息可确保查询使用最新的统计信息进行编译。 不过,更新统计信息会导致查询重新编译。 我们建议不要太频繁地更新统计信息,因为需要在改进查询计划和重新编译查询所用时间之间权衡性能。 具体的折衷方案取决于你的应用程序。 UPDATE STATISTICS
可以使用 tempdb
对行样本进行排序以生成统计信息。
权限
如果使用 UPDATE STATISTICS
或通过 SQL Server Management Studio 进行更改,则要求对表或视图具有 ALTER 权限。 如果使用 sp_updatestats
,则要求具有 sysadmin 固定服务器角色的成员身份或数据库 (dbo) 的所有者身份。
使用 SQL Server Management Studio
更新统计信息对象
在“对象资源管理器”中,选择加号以便展开要更新统计信息的数据库。
选择加号以便展开“表”文件夹。
选择加号以便展开要更新统计信息的表。
选择加号以便展开“统计信息”文件夹。
右键单击要更新的统计信息对象,然后选择“属性”。
在“统计信息属性 - statistics_name”对话框中,选中“更新这些列的统计信息”复选框,然后选择“确定”。
使用 Transact-SQL
更新特定的统计信息对象
在 “对象资源管理器” 中,连接到 数据库引擎的实例。
在标准栏上,选择“新建查询” 。
将以下示例复制并粘贴到查询窗口中,然后选择“执行”。
USE AdventureWorks2022; GO -- The following example updates the statistics for the AK_SalesOrderDetail_rowguid index of the SalesOrderDetail table. UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid; GO
更新表中的所有统计信息
在 “对象资源管理器” 中,连接到 数据库引擎的实例。
在标准栏上,选择“新建查询” 。
将以下示例复制并粘贴到查询窗口中,然后选择“执行”。
USE AdventureWorks2022; GO -- The following example updates the statistics for all indexes on the SalesOrderDetail table. UPDATE STATISTICS Sales.SalesOrderDetail; GO
有关详细信息,请参阅更新统计信息。
更新数据库中的所有统计信息
在 “对象资源管理器” 中,连接到 数据库引擎的实例。
在标准栏上,选择“新建查询” 。
将以下示例复制并粘贴到查询窗口中,然后选择“执行”。
USE AdventureWorks2022; GO -- The following example updates the statistics for all tables in the database. EXEC sp_updatestats;
自动索引和统计信息管理
使用自适应索引碎片整理等解决方案,自动管理一个或多个数据库的索引碎片整理和统计信息更新。 此过程根据碎片级别以及其他参数,自动选择是重新生成索引还是重新组织索引,并使用线性阈值更新统计信息。