SQL SERVER 统计信息概述(Statistics)

发表于:2015-6-25 10:10

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:BITALK    来源:51Testing软件测试网采编

  前言
  查询优化器使用统计信息来创建可提高查询性能的查询计划,对于大多数查询,查询优化器已经为高质量查询计划生成必要的统计信息,但是在少数情况下,您需要创建附加的统计信息或者修改查询设计以得到最佳结果。因此理解和合理使用统计信息是数据库优化的方式之一。
  统计信息的分类
  根据创建源的不同,统计信息分为两种表统计信息和索引统计信息,除非你自定义它们,否则它们之间没有本质的区别。
  索引统计信息建立在索引上面,因此对于创建已经存在的数据上,在创建索引的时候会扫描全部数据,这些数据也会创建在索引的统计信息上。
  表的统计信息创建在列上面。对于已经存在的数据表上面,需要对某些列使用过滤方法(比如 WHERE,JOIN-ON),会在上面自动建立统计信息。只是它们使用采样数据而不是全部数据。
  统计信息的存储
  统计信息存储在一系列的系统表中,比如Sysindex,你可以通过系统视图sys.stats 和 Sys.index来查看部分信息。但是详细的信息可以通过系统函数DBCC SHOW_STATISTICS来查看。统计信息本身占用很少的磁盘空间,所以不需要关注是否删除不必要的统计信息来释放更多的磁盘空间。
  怎样查看统计信息的更新时间
  DBCC SHOW_STATISTICS
  语法
  DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target )
  [ WITH [ NO_INFOMSGS ] < option > [ , n ] ]
  < option > :: =     STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM
  参数
  table_or_indexed_view_name
  要显示其统计信息的表或索引视图的名称。
  target
  要显示其统计信息的索引、统计信息或列的名称。 如果 target 是表或索引视图的现有索引或统计信息的名称,则返回有关此目标的统计信息。 如果 target 是现有列的名称,且此列中存在自动创建的统计信息,则返回有关该自动创建的统计信息的信息。 如果列目标中不存在自动创建的统计信息,则返回错误消息 2767。
  NO_INFOMSGS
  取消严重级别从 0 到 10 的所有信息性消息。
  STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ ,n ]
  如果指定以上一个或多个选项,将根据指定的选项限制该语句返回的结果集。 如果没有指定任何选项,则返回所有统计信息。
  实例
  下面的示例显示 AdventureWorks2012 数据库中 Person.Address 表的 AK_Address_rowguid 索引的所有统计信息
  DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
  下面的示例将为 AK_Address_rowguid索引显示的统计信息限制为 HISTOGRAM 数据。
  DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;
  什么时候需要维护统计信息
  · 查询执行时间很长
  · 在升序或者是降序键列上发生插入操作
  · Truncate 表或者对表大部分列进行大容量的插入后
  怎样维护统计信息
  SQL Server 提供两个基本的命令来更新统计信息
  · sp_updatestats
  · update statistics
  在后续的文章中将讲述这2个命令的区别和使用方法。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号