• 全部
...

CREATE STATISTICS 在SQL 2005 应用问题

friendlyFour 2008-12-17 01:48:19
最近有个同事用SQL 2005 优化工具对某一个Proc进行优化,而优化的结果为产生了很多相应的index和STATISTICS ,查了一下资料还是对STATISTICS不十分理解。和您学习了。

问题:

1、STATISTICS到底有什么作用。即:“当前数据库的指定表中的多个集合的统计信息”,这个要怎么理解,这个统计信息什么作用。

2、SQL2000和SQL2005在使用STATISTICS是否有区别。

3、为什么运用SQL2005优化工具会产生很多CREATE STATISTICS,并这些CREATE STATISTICS和相应的索引有直接关系,STATISTICS和index有什么关系。
...全文
给本帖投票
1534 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
firecc05 2008-12-17
  • 打赏
  • 举报
回复
1.STATISTICS是一个表中某几个列的统计信息,如一个表是全校学生某次考试的分数,score列的类型是int,取值范围是0到100的整数,那么statistc就是每个分数分别有多少人。在一个特定的查询中,使用索引可能加快速度,也可能减慢速度,所以SQL server要事先对使用索引的效果做一个预测,预测的依据就是STATISTICS。
2.默认情况下,表或索引更改了,统计会相应地自动更新,以保持统计是最新的。但是可以在数据库选项中关闭这个自动更新的功能,提高数据表的更新速度。但需要定期手动更新统计。因为过期的统计信息会对是否使用索引的判断带来误判。没发现SQL2000和SQL2005的统计有什么区别。
3.index要依赖正确的STATISTICS才能发挥作用。而你的SQL2005优化工具对缺乏STATISTIC的列自动产生了创建语句。
firecc05 2008-12-17
  • 打赏
  • 举报
回复
1.STATISTICS是一个表中某几个列的统计信息,如一个表是全校学生某次考试的分数,score列的类型是int,取值范围是0到100的整数,那么statistc就是每个分数分别有多少人。在一个特定的查询中,使用索引可能加快速度,也可能减慢速度,所以SQL server要事先对使用索引的效果做一个预测,预测的依据就是STATISTICS。
2.默认情况下,表或索引更改了,统计会相应地自动更新,以保持统计是最新的。但是可以在数据库选项中关闭这个自动更新的功能,提高数据表的更新速度。但需要定期手动更新统计。因为过期的统计信息会对是否使用索引的判断带来误判。没发现SQL2000和SQL2005的统计有什么区别。
3.index要依赖正确的STATISTICS才能发挥作用。而你的SQL2005优化工具对缺乏STATISTIC的列自动产生了创建语句。
水族杰纶 2008-12-17
  • 打赏
  • 举报
回复
沒用過
幫頂~~~~
dawugui 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 friendlyFour 的帖子:]
最近有个同事用SQL 2005 优化工具对某一个Proc进行优化,而优化的结果为产生了很多相应的index和STATISTICS ,查了一下资料还是对STATISTICS不十分理解。和您学习了。

问题:

1、STATISTICS到底有什么作用。即:“当前数据库的指定表中的多个集合的统计信息”,这个要怎么理解,这个统计信息什么作用。

2、SQL2000和SQL2005在使用STATISTICS是否有区别。

3、为什么运用SQL2005优化工具会产生很多CREATE STATISTICS,并这些CREATE STATISTICS和相应的索引有直接关系,STATISTICS和index有什么关系。
[/Quote]
这个是个统计方便用的,不过一般都没使用过.

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

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

dobear_0922 2008-12-17
  • 打赏
  • 举报
回复
CREATE STATISTICS statistics_name
ON { table | view } ( column [ ,...n ] )
[ WITH
[ [ FULLSCAN
| SAMPLE number { PERCENT | ROWS }
| STATS_STREAM = stats_stream ] [ , ] ]
[ NORECOMPUTE ]
] ;


不清楚SQL优化向导是怎么做的,帮顶。

34,836

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部