• 相关软件
    >UPDATE STATISTICS 创建者:webmaster 更新时间:2006-02-16 15:51

    在指定的表或索引视图中,对一个或多个统计组(集合)有关键值分发的信息进行更新。若要基于列生成统计,请参见 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 语句生成基于非索引列的统计。查询优化依赖于分发步骤的准确性:


    • 如果索引中的键值有显著变化,请对此索引重新运行 UPDATE STATISTICS。



    • 如果索引列中添加、更改或删除大量数据(即如果键值分发更改),或者用 TRUNCATE TABLE 语句将表截断然后重新填充,请使用 UPDATE 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
    相关文章
    本页查看次数: