Transact-SQL 参考

UPDATE STATISTICS

在指定的表或索引视图中,对一个或多个统计组(集合)有关键值分发的信息进行更新。若要基于列生成统计,请参见 CREATE STATISTICS

语法

UPDATE STATISTICS table | view
    [
        index
        | ( statistics_name [ ,...n ] )
    ]
    [    WITH
        [
            [ FULLSCAN ]
            | SAMPLE number { PERCENT | ROWS } ]
            | RESAMPLE
        ]
        [ [ , ] [ ALL | COLUMNS | INDEX ]
        [ [ , ] NORECOMPUTE ]
    ]

参数

table | view

要更新统计的表或索引视图的名称。表名和视图名必须符合标识符的规则。有关更多信息,请参见使用标识符。由于索引名在每个数据库中不唯一,所以必须指定 tableview。可选择指定数据库、表或视图所有者。只有在 Microsoft® SQL Server™ 2000 企业版中才支持索引视图。

index

要更新统计的索引。索引名必须符合标识符的规则。如果未指定 index,则更新指定表或索引视图中的所有索引的分发统计。若要查看索引名和描述的列表,请带表名或视图名执行 sp_helpindex

statistics_name

要更新的统计组(集合)的名称。统计名称必须符合标识符规则。有关生成统计组的更多信息,请参见 CREATE STATISTICS

n

是表示可以指定多个 statistic_name 组的占位符。

FULLSCAN

指定应读取 tableview 中的所有行以收集统计。FULLSCAN 提供与 SAMPLE 100 PERCENT 相同的行为。FULLSCAN 不能与 SAMPLE 选项一起使用。

SAMPLE number { PERCENT | ROWS }

当为较大的表或视图收集统计时,指定要采样的表或索引视图的百分比或行数。number 只允许使用整数,无论它是 PERCENT 还是 ROWS。若要对较大的表或视图使用默认采样行为,请将 SAMPLE number 和 PERCENT 或 ROWS 一起使用。Microsoft SQL Server 将确保值的采样数不低于某一数目,以保证统计有用。如果 PERCENT、ROWS 或 number 选项导致要采样的行数过小,SQL Server 则自动根据表或视图中的现有行数改正采样。

说明  默认行为是在目标表或索引视图上进行采样扫描。SQL Server 自动计算所需的样本大小。

RESAMPLE

指定使用从所有现有统计(包括索引)继承的采样速率来收集统计。如果采样速率导致要采样的行过少,SQL Server 则自动根据表或视图中的现有行数改正采样。

ALL | COLUMNS | INDEX

指定 UPDATE STATISTICS 语句是否影响列统计、索引统计或所有现有统计。如果未指定选项,则 UPDATE STATISTICS 语句影响所有的统计。每个 UPDATE STATISTICS 语句只能指定一种类型(ALL、COLUMNS 或 INDEX)。

NORECOMPUTE

指定过期统计不自动重新计算。统计过期与否取决于在索引列上进行的 INSERT、UPDATE 和 DELETE 操作的数量。指定该选项时,将导致 SQL Server 禁用自动统计重建功能。若要还原自动统计重新计算,请重新执行 UPDATE STATISTICS(不要 NORECOMPUTE 选项),或者执行 sp_autostats

重要  禁用自动统计重新计算会导致 SQL Server 查询优化器对于涉及指定表的查询选择非最佳的策略。

注释

SQL Server 保留每个索引中关于键值分发的统计,并且使用这些统计来决定查询处理中使用哪个(或哪些)索引。用户可以通过使用 CREATE STATISTICS 语句生成基于非索引列的统计。查询优化依赖于分发步骤的准确性:

若要查看统计最近一次更新的时间,请使用 STATS_DATE 函数。

只有当能够在计算列上创建索引时,才可以在包含这些计算列的表上创建或更新统计。有关在计算列上创建索引的要求和限制的更多信息,请参见 CREATE INDEX

权限

UPDATE STATISTICS 权限默认授予表或视图的所有者,并且该权限不可转让。

示例
A. 更新单个表的所有统计

本示例更新表 authors 上的所有索引分发统计。

UPDATE STATISTICS authors
B. 仅更新单一索引的统计

本示例仅更新表 authors 的索引 au_id_ind 的分发信息。

UPDATE STATISTICS authors au_id_ind
C. 使用 50% 采样更新特定统计组(集合)的统计

本示例首先创建表 authors au_lname 列和 au_fname 列的统计组,然后对其进行更新。

CREATE STATISTICS anames 
   ON authors (au_lname, au_fname)
   WITH SAMPLE 50 PERCENT
GO
-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS authors(anames) 
   WITH SAMPLE 50 PERCENT
GO
D. 使用 FULLSCAN 和 NORECOMPUTE 更新特定统计组(集合)的统计

本示例更新表 authors 中的 anames 统计组(集合),强制对表 authors 中的所有行进行完全扫描,并且关闭该统计组(集合)的自动统计更新。

UPDATE STATISTICS authors(anames)
   WITH FULLSCAN, NORECOMPUTE
GO

请参见

CREATE INDEX

CREATE STATISTICS

游标

DBCC SHOW_STATISTICS

DROP STATISTICS

EXECUTE

函数

sp_autostats

sp_createstats

sp_dboption

sp_helpindex

sp_updatestats

STATS_DATE