CREATE STATISTICS

作者:vkvi 来源:ITPOW(原创) 日期:2013-7-24

今天在使用 SQL Server 的数据库引擎优化顾问时,提示我建立两个统计,执行 CREATE STATISTICS 语句。平时还没深究这块,以为都是自动的,看来必要时还是得手动创建一些统计。

CREATE STATISTICS 用来创建统计,也就是说它会统计某个表的某个列的数据情况,比如性别一列,它会统计男的有多少条记录,女的有多少条记录,保密的有多少条记录。统计来做什么呢?统计来便于查询,比如要做分页查询,性别列作为条件,它会一下就找出男的、女的有多少条记录,分页就要快些。

CREATE STATISTICS 有个参数 NORECOMPUTE,若指定它,即使记录变了,系统仍然用之前的统计信息(这肯定就不准了),所以绝大多数情况下,我们不要指定这个参数。

绝大多数情况下,我们不需要设置这个统计,因为系统会自动处理。

另外,我摘抄了点语法的技术细节。

作用

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

语法

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

是要在其上创建统计的一列或一组列的名称。不能将计算列和 ntext、text 或 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_ddladmin 和 db_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

相关文章