续:有关SQL SERVER分布统计的问题

来源:未知 责任编辑:责任编辑 发表时间:2014-02-02 17:50 点击:
续前一篇——有关SQL SERVER分布统计的问题 (http://www.2cto.com/database/201203/123992.html)


查询统计
现在我们来粗略地看下直方图的工作方式,重要的是要了解如何查询表中的统计个数,幸运的是可以使用以下命令来查询:
   1: SELECT Schema_name(sys.objects.schema_id) + '.' + Object_Name(sys.stats.object_id) AS Table_Name,
   2:        sys.columns.name AS Column_Name,
   3:        sys.stats.Name AS Stats_Name
   4:   FROM sys.stats
   5:  INNER JOIN sys.stats_columns
   6:     ON stats.object_id = stats_columns.object_id
   7:    AND stats.stats_id = stats_columns.stats_id
   8:  INNER JOIN sys.columns
   9:    ON stats_columns.object_id = columns.object_id
  10:   AND stats_columns.column_id = columns.column_id
  11:  INNER JOIN sys.objects
  12:     ON stats.object_id = objects.object_id
  13:   LEFT OUTER JOIN sys.indexes
  14:     ON sys.stats.Name = sys.indexes.Name
  15:  WHERE sys.objects.type = 'U'
  16:    --AND sys.objects.name = 'Tab1'
  17:  ORDER BY Table_Name
  18: GO
查询结果:

创建统计
 
在对你的数据库运行上面的查询时看到的统计对象是自动创建的,当然,你也可以通过运行以下命令来手动创建:
   1: CREATE STATISTICS Stats_MyStatOnCol1 ON t1(i) WITH FULLSCAN
上面的这条命令将对表t1的i列上创建一个统计对象,同时使用WITH FULLSCAN参数来扫描整个表,而不是采样部分行,主要是为了得到更为精确的统计直方图。
不过,FULL SCAN的开销也是比较大的,但是要比采样扫描更为精确。
采样扫描
默认,SQL SERVER会根据现有的统计对象是否过期来进行创建或更新统计;当检测到与当前数据不匹配时,SQL SERVER会采样表中的数据进行重建统计,默认的采样频率是根据表的大小进行缓慢增加。
当使用采样创建统计时,SQL SERVER会从IAM链中随机选取一些页面,一旦某个页面选定后,页面中的这些数据就作为采样的数据源,这偶尔对导致一些不正确的数据统计,为此,你可能使用FULLSCAN来重建统计。
注意:有关IAM链的信息可以从这个链接http://www.sqlskills.com/blogs/paul/post/Inside-the-Storage-Engine-IAM-pages-IAM-chains-and-allocation-units.aspx获取详细的内容,另外,使用下面的信息来检测标记过期统计的方法,当统计的列发生更新时,SQL SERVER会根据实例中设置的“自动更新统计”来保持数据最新,其工作的方法如下:
当表的行数小于6条,并且该表存储在TEMPDB数据库中,每发生6次修改会触发自动更新
当表的行数大于6条,并且小于等于500,每发生500次修改会触发自动更新
当表的行数大于500条,表中的(500+20%)的数据发生变化会触发自动列新
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • sql常见面试题
  • SQL SERVER 2005性能之跟踪
  • SQL编程(一)
  • LINUX上RMAN自动备份脚本
  • sql server面试题
  • 如何将多个SQL查询统计结果一次显示出来
  • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
  • sql server 列转行
  • SQL小技巧系列 --- 行转列合并
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1