Transact-SQL 参考

CREATE STATISTICS

基于给出的一列或一组列创建柱状图和关联的密度组(集合)。

语法

CREATE STATISTICS statistics_name
ON { table | view
} ( column [ ,...n ] )
    
[ WITH
        [ [ FULLSCAN
            | SAMPLE number { PERCENT | ROWS } ] [ , ] ]
        [ NORECOMPUTE ]
    ]

参数

statistics_name

是要创建的统计组的名称。统计名称必须符合标识符规则。

table

是要在其上创建命名统计的表名。表名必须符合标识符规则。table 是与 column 关联的表。可以选择是否指定表所有者的名称。通过指定合法的数据库名称,可以在其它数据库中的表上创建统计。

view

是要在其上创建命名统计的视图名。必须在具有聚集索引的视图上创建统计。视图名必须符合标识符规则。view 是与 column 关联的视图。可以选择是否指定视图所有者名称。通过指定合法的数据库名称,可以在其它数据库中的视图上创建统计。

column

是要在其上创建统计的一列或一组列的名称。不能将计算列和 ntexttext image 数据类型的列指定为统计列。

n

是表示可以指定多列的占位符。

FULLSCAN

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

SAMPLE number { PERCENT | ROWS }

指定应使用随机采样来读取一定百分比或指定行数的数据以收集统计信息。number 只能为整数:如果是 PERCENT,number 应介于 0 到 100 之间;如果是 ROWS,number 可以是从 0 到 n 的总行数。

此选项不能与 FULLSCAN 选项一起使用。如果没有给出 SAMPLE 或 FULLSCAN 选项,Microsoft® SQL Server™ 会计算出一个自动样本。

NORECOMPUTE

指定应禁用统计的自动重新计算功能。如果指定了该选项,那么即使数据更改,SQL Server 仍将继续使用以前创建的(旧)统计。SQL Server 不自动更新和维护统计,这将使生成的计划可能不是最佳的。

警告  建议不要轻易使用该选项,只有训练有素的系统管理员才应使用该选项。

注释

只有表的所有者才能在该表上创建统计。不管表中是否有数据,表的所有者都可以在任何时候创建统计组(集合)。

CREATE STATISTICS 可以在带聚集索引的视图或索引视图上执行。只有在查询直接引用视图并为该视图指定了 NOEXPAND 提示的情况下,优化程序才会使用索引视图的统计。否则,在查询计划代入索引视图之前,统计由基础表导出。这种代入仅在 Microsoft SQL Server 2000 企业版和开发版中受支持。

权限

CREATE STATISTICS 权限默认授予 sysadmin 固定服务器角色成员或 db_ddladmindb_owner 固定数据库角色成员以及表的所有者且不可转让。

示例
A. 使用带 SAMPLE number PERCENT 的 CREATE STATISTICS

下例创建 names 统计组(集合),该组基于 Customers 表中 CompanyName ContactName 列的百分之五的数据计算随机采样统计。

CREATE STATISTICS names
   ON Customers (CompanyName, ContactName)
   WITH SAMPLE 5 PERCENT
GO
B. 使用带 FULLSCAN 和 NORECOMPUTE 的 CREATE STATISTICS

下例创建 names 统计组(集合),该组基于 Customers 表中 CompanyName ContactName 列的所有行计算统计,并禁用统计的自动重新计算功能。

CREATE STATISTICS names
   ON Northwind..Customers (CompanyName, ContactName)
   WITH FULLSCAN, NORECOMPUTE
GO

请参见

CREATE INDEX

DBCC SHOW_STATISTICS

DROP STATISTICS

sp_autostats

sp_createstats

sp_dboption

UPDATE STATISTICS