更新统计信息(UPDATE STATISTICS,EXEC sp_updatestats)

本文介绍如何使用UPDATESTATISTICS命令及存储过程sp_updatestats更新SQL查询优化统计信息,以提高查询效率。文章涵盖更新统计信息的方法,包括全扫描、采样更新及关闭自动更新等策略,并提供实际案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UPDATE STATISTICS

该命令在一张表或者索引了的视图上更新查询优化统计数字信息. 默认情况下, 查询优化器已经更新了必要的用来提高查询计划的统计信息; 在某些情况下, 你可以通过使用UPDATE STATISTICS 命令或者存储过程sp_updatestats 来比默认更频繁地更新统计信息来提高查询效率.

 

更新统计信息能确保查询能以最新的统计信息来编译. 然而, 更新统计信息会引起查询的重新编译. 我们建议不要过于频繁地更新统计信息, 因为这里有一个在提高查询计划和用来重新编译查询的权衡. 具体的权衡要看你的应用程序而定.

 

关于统计信息的更多信息, 还有何时使用UPDATE STATISTICS, 请参考Using Statistics to Improve Query Performance.

 

注意: 

 

何时使用UPDATE STATISTICS

参考Using Statistics to Improve Query Performance.

 

使用 sp_updatestats更新所有的统计信息

更多信息关于如何更新所有数据库中的用户定义的表和系统内部表, 请参考存储过程sp_updatestats (Transact-SQL)

举例, 下面的命令调用sp_updatestats 存储过程来更新数据库里所有的统计信息.

EXEC sp_updatestats

 

确定统计信息最后更新的时间

要确定统计信息最后更新的时间, 请使用STATS_DATE 函数.

权限

 

如要运行这个命令, 你需要在表或视图上有ALTER权限.

例子

 

A. Update all statistics on a table

The following example updates the statistics for all indexes on the SalesOrderDetail table.

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO
 

B. Update the statistics for an index

The following example updates the statistics for the AK_SalesOrderDetail_rowguid index of the SalesOrderDetail table.

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO
 

C. Update statistics by using 50 percent sampling

The following example creates and then updates the statistics for the Name and ProductNumber columns in the Product table.

USE AdventureWorks;
GO
CREATE STATISTICS Products
    ON Production.Product ([Name], ProductNumber)
    WITH SAMPLE 50 PERCENT
-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS Production.Product(Products) 
    WITH SAMPLE 50 PERCENT;

 

D. Update statistics by using FULLSCAN and NORECOMPUTE

The following example updates the Products statistics in the Product table, forces a full scan of all rows in the Product table, and turns off automatic statistics for the Products statistics.

USE AdventureWorks;
GO
UPDATE STATISTICS Production.Product(Products)
    WITH FULLSCAN, NORECOMPUTE;
GO

 

译自:

UPDATE STATISTICS (Transact-SQL)

http://msdn.microsoft.com/en-us/library/ms187348.aspx

/* Navicat Premium Data Transfer Source Server : 10.10.10.135 Source Server Type : SQL Server Source Server Version : 11002100 Source Host : 10.10.10.135:1433 Source Catalog : SummerFreshData_Province_JL Source Schema : dbo Target Server Type : SQL Server Target Server Version : 11002100 File Encoding : 65001 Date: 30/06/2025 19:02:10 */ -- ---------------------------- -- Table structure for StrawBurningDays -- ---------------------------- IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[StrawBurningDays]') ) DROP TABLE [dbo].[StrawBurningDays] GO CREATE TABLE [dbo].[StrawBurningDays] ( [Id] int NOT NULL, [CityName] varchar(255) COLLATE Chinese_PRC_CI_AS NULL, [Day] varchar(255) COLLATE Chinese_PRC_CI_AS NULL, [JudgmentCriteria] varchar(1000) COLLATE Chinese_PRC_CI_AS NULL ) GO ALTER TABLE [dbo].[StrawBurningDays] SET (LOCK_ESCALATION = TABLE) GO EXEC sp_addextendedproperty 'MS_Description', N'城市名称', 'SCHEMA', N'dbo', 'TABLE', N'StrawBurningDays', 'COLUMN', N'CityName' GO EXEC sp_addextendedproperty 'MS_Description', N'燃烧日期', 'SCHEMA', N'dbo', 'TABLE', N'StrawBurningDays', 'COLUMN', N'Day' GO EXEC sp_addextendedproperty 'MS_Description', N'判定依据', 'SCHEMA', N'dbo', 'TABLE', N'StrawBurningDays', 'COLUMN', N'JudgmentCriteria' GO -- ---------------------------- -- Records of StrawBurningDays -- ---------------------------- -- ---------------------------- -- Primary Key structure for table StrawBurningDays -- ---------------------------- ALTER TABLE [dbo].[StrawBurningDays] ADD CONSTRAINT [PK__StrawBur__3213E83FE0F0D984] PRIMARY KEY CLUSTERED ([Id]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO 设置Id 主键自增长 1
最新发布
07-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值