首页 > 代码库 > 统计的基本操作语法 <第五篇>

统计的基本操作语法 <第五篇>

 1、创建统计语法:

CREATE STATISTICS statistics_name 
ON { table_or_indexed_view_name } ( column [ ,...n ] ) 
    [ WHERE <filter_predicate> ]
    [ WITH 
        [ [ FULLSCAN 
          | SAMPLE number { PERCENT | ROWS } 
          | STATS_STREAM = stats_stream ] [ , ] ] 
        [ NORECOMPUTE ] 
    ] ;

<filter_predicate> ::= 
    <conjunct> [AND <conjunct>]

<conjunct> ::=
    <disjunct> | <comparison>

<disjunct> ::=
        column_name IN (constant ,…)

<comparison> ::=
        column_name <comparison_op> constant

<comparison_op> ::=
    IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !<

  以上有3个词比较陌生,看看:

  • FULLSCAN:通过全扫描表或索引视图中的所有行来计算统计信息。 FULLSCAN 和 SAMPLE 100 PERCENT 的结果相同。 FULLSCAN 不能与 SAMPLE 选项一起使用。
  • SAMPLE number { PERCENT | ROWS }:指定在查询优化器创建统计信息时所使用的表或索引视图中的近似行百分比或行数。在大多数情况下,不必指定 SAMPLE,这是因为在默认情况下,查询优化器已根据需要采用抽样,并以统计方式确定大量样本的大小,以便创建高质量的查询计划。 如果未指定 SAMPLE 和 FULLSCAN,查询优化器则默认使用抽样数据并计算样本大小。建议不指定 0 PERCENT 或 0 ROWS。 如果指定 0 PERCENT 或 0 ROWS,则将创建统计信息对象,但该对象不包含任何统计信息数据。
  • NORECOMPUTE:为 statistics_name 禁用自动统计信息更新选项 AUTO_STATISTICS_UPDATE。 如果指定此选项,则查询优化器将完成 statistics_name 的任何正在进行中的统计信息更新并禁用将来的更新。

  示例:

CREATE STATISTICS ST_NAME
ON Person(Name)    --在Person表的Name列上创建统计

  查看结果:

  技术分享

CREATE STATISTICS ST_NAME
ON PersonTenThousand (Name)
WHERE Name IS NOT NULL    --过滤统计
WITH FULLSCAN;           --全扫描

  2、更新统计语法

UPDATE STATISTICS ON < table_name > [ . <index_name> ]
    WITH FULLSCAN {, NORECOMPUTE }

  说明:

  • table_name:指定要更新其统计信息的表的名称。
  • index_name:要更新其统计信息的索引。 如果未指定索引,则将更新指定的表或索引视图中所有的分发统计信息。 这包括使用 CREATE STATISTICS 语句创建的统计信息、自动创建的统计信息以及索引创建期间创建的统计信息。
  • FULLSCAN:扫描表的全部行统计。
  • NORECOMPUTE:进制统计自动更新。

   示例:

UPDATE STATISTICS Person    --默认抽样更新该表上的全部统计信息UPDATE STATISTICS Person IX_NAME    --全扫描更新该表上的统计IX_NAME信息
WITH FULLSCAN;

  3、删除统计语法

DROP STATISTICS table.statistics_name | view.statistics_name [ ,...n ]

  示例:

DROP STATISTICS PersonTenThousand.ST_NAME    --删除Person表上的统计ST_NAME

   4、查看统计的操作:

  查看Person表的IX_NAME统计:

  DBCC SHOW_STATISTICS(Person,IX_NAME)

  输出如下:

  技术分享

  关于这些列的说明http://technet.microsoft.com/zh-cn/library/ms174384(v=sql.100).aspx

  5、配置数据库的统计的自动创建

ALTER DATABASE Test SET AUTO_CREATE_STATISTICS OFF/ON

  6、配置数据库统计的自动更新

ALTER DATABASE Test SET AUTO_UPDATE_STATISTICS OFF/ON

  7、异步更新的配置

ALTER DATABASE Test SET AUTO_UPDATE_STATISTICS_ASYNC OFF/ON

  8、存储过程配置统计自动更新开启

EXEC sp_autostats ‘ta1‘,‘ON‘    --表ta1所有的统计开启自动更新

  9、存储过程配置统计,精确到单个统计对象

EXEC sp_autostats ‘ta1‘,‘OFF‘,IX_COLUMN2    --表ta1上的索引IX_COLUMN2开启自动更新

统计的基本操作语法 <第五篇>