更新统计信息

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics 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

更新统计信息对象

  1. 在“对象资源管理器”中,选择加号以便展开要更新统计信息的数据库。

  2. 选择加号以便展开“表”文件夹

  3. 选择加号以便展开要更新统计信息的表。

  4. 选择加号以便展开“统计信息”文件夹。

  5. 右键单击要更新的统计信息对象,然后选择“属性”。

  6. 在“统计信息属性 - statistics_name”对话框中,选中“更新这些列的统计信息”复选框,然后选择“确定”。

使用 Transact-SQL

更新特定的统计信息对象

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。

    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
    

更新表中的所有统计信息

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。

    USE AdventureWorks2022;
    GO
    -- The following example updates the statistics for all indexes on the SalesOrderDetail table.
    UPDATE STATISTICS Sales.SalesOrderDetail;
    GO
    

有关详细信息,请参阅更新统计信息

更新数据库中的所有统计信息

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。

    USE AdventureWorks2022;
    GO
    -- The following example updates the statistics for all tables in the database.
    EXEC sp_updatestats;
    

自动索引和统计信息管理

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