分析统计<第三篇>
统计是一组存储为柱状图的信息。柱状图是显示数据落入不通分类中的频率的一种统计结构。SQL Server存储的柱状图包括多大200行的列和索引键(或多列索引键的第一列)的数据分布采样。在两个连续采样值之间的索引键值范围上的信息被称为步骤。这些步骤由200个存储值之间的不通大小间隔组成。
一个步骤提供以下信息:
- 给定步骤的最高值(RANGE_HI_KEY);
- 等于RANGE_HI_KEY的行数(EQ_ROWS);
- 前一个最高值和当前最高值之间的行范围,这些样本不计算在内(RANGE_ROWS);
- 范围中不同行的数量(DISTINCT_RANGE_ROWS),如果范围中所有值都是唯一的,那么RANGE_ROWS等于DISTINCT_RANGE_ROWS;
- 等于范围内一个键值的平均行数(AVG_RANGE_ROWS);
CREATE NONCLUSTERED INDEX IX_COLUMN2 ON ta1(column2) DBCC SHOW_STATISTICS(ta1,IX_COLUMN2)
我们看到统计的信息如下:
除了步骤上的信息,统计中的其他有用信息包括:
- 最后更新的事件统计;
- 表中的行数;
- 平均索引键长度;
- 柱状图采样行数;
- 列组合的密度;
一、密度
创建执行计划时,查询优化器分析用于过滤器和JOIN子句中的列的统计。具有高选择性的过滤条件将来自表的行数限制在一个小结果集内,并且帮助优化器保持低的查询开销。具有唯一索引的列将有非常高的选择性,因为它可以将匹配行数限制为1。
另一方面,低选择性的过滤条件将从表中返回一个大的结果集。非常低选择性的过滤条件使列上的非聚集索引变得无效。为大的结果集从非聚集索引导航到基本表通常比直接扫描基本表开销更大,因为非聚集索引相关的书签查找开销太大。
统计以密度(density)比率的形式跟踪列的选择性。高选择性(或唯一性)的列将有很低的密度。低密度的列(高选择性)适用于非聚集索引,因为它帮助优化器很快地检索少量的行。这也是过滤索引操作的主要依据,因为过滤器的目标是改进索引的选择性或密度。
密度可以表示为:
密度=1/列中不同值的数量
密度是0-1之间的数值。列密度越低,越适合于非聚集索引。你可以自己计算来确定索引和统计中列的密度。
例如上面ta1表中的column2列上的密度
SELECT 1.0/COUNT(DISTINCT Column2) FROM ta1
当然,也可以在DBCC SHOW_STATISTICS的输出中的All density列中看到真实的数据。这个列上的高密度值使其不适合于作为索引,即使是过滤索引也一样。但是,在步骤中维护的该索引键值统计帮助查询优化器使用断言c1=1来使用该索引。
二、多列索引上的统计
在索引只有一列的情况下,统计包含一个柱状图和该列的一个密度值。有多列的复合索引的统计由仅包含第一列的柱状图和多个密度值组成。这就是在建立符合索引或符合统计时,明智的方法是将更高选择性的列即具有最低密度的列放在第一位的原因。密度值包含第一列和每个索引键列的前缀组合的密度。当WHERE和JOIN子句中断言引用多列时,多个密度值帮助优化器查找符合索引的选择性。尽管第一列能帮助确定柱状图,但是该列本身最后的密度将相同而不管列的顺序。
CREATE NONCLUSTERED INDEX IX_COLUMN2 ON ta1(column2,column1) WITH DROP_EXISTING
在来看看统计信息:
- 第1列的密度值;
- (第1+第2)列的密度;
三、过滤索引上的统计
过滤索引的目的是改变组成索引的数据,从而改变柱状图和密度使索引性能更好。
我们看到,组成统计的行数急剧下降,因为有一个过滤器,过滤了3000行,行数当然下降啦。平均关键字长度增加,因为不在处理长度为0的Name。
密度测量值非常有趣,两个值非常接近,但是过滤后的密度略低,说明更少的唯一值。这是因为过滤后的数据,虽然选择性稍微低一些,但是实际上更精确,消除了对搜索没有贡献的控制。第二个值密度表示聚集索引指针,与Name的单独密度值相同,因为都表示相同的唯一值数量。前一列附加的聚集索引的密度是一个小得多的数值,因为消除了null值而导致的所有不被包含在过滤后的数据的Id唯一值。
另一个开放的选项是创建过滤索引,这使你能在分区的表上创建更加精细调整过的柱状图。因为统计不会自动在分区表上创建,并且不能使用CREATE STATISTICS自行创建,所以这是必要的。可以通过分区创建过滤索引并获得统计或创建特定的过滤统计。
分析统计<第三篇>的更多相关文章
- zz2019年主动学习有哪些进展?答案在这三篇论文里
2019年主动学习有哪些进展?答案在这三篇论文里 目前推广应用的机器学习方法或模型主要解决分类问题,即给定一组数据(文本.图像.视频等),判断数据类别或将同类数据归类等,训练过程依赖于已标注类别的训练 ...
- PHP 性能分析第三篇: 性能调优实战
注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或 PHP 性能分析第二篇: 深入研究 XHGui. 在本系列的 ...
- 分析RAC下一个SPFILE整合的三篇文章的文件更改
大约RAC下一个spfile分析_整理在_2014.4.17 说明:文章来源于网络 第一篇:RAC下SPFILE文件改动 在RAC下spfile位置的改动与单节点环境不全然一致,有些地方须要特别注意, ...
- SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第三篇)
SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第三篇) 最近真的没有什么精力写文章,天天加班,为了完成这个系列,硬着头皮上了 再看这篇文章之前请大家先看我之前写的第一篇和第二篇 第一篇: ...
- 一年三篇IF大于7的牛人告诉你怎么写SCI
一年三篇IF大于7的牛人告诉你怎么写SCI 1 研究生必备四本 俗话说好记性不如烂笔头,所以一定要首先养成做笔记的好习惯!作为研究生下面这几个本子是必不可少的: 1.实验记录本(包括试验准备本),这当 ...
- python数据挖掘第三篇-垃圾短信文本分类
数据挖掘第三篇-文本分类 文本分类总体上包括8个步骤.数据探索分析->数据抽取->文本预处理->分词->去除停用词->文本向量化表示->分类器->模型评估.重 ...
- Linux进程内存用量分析之堆内存篇
https://mp.weixin.qq.com/s/a6mLMDinYQGUSaOsGYCEaA 独家|Linux进程内存用量分析之堆内存篇 姬晨烜 58技术 2019-12-06 导语 本文将介绍 ...
- 第三篇——第二部分——第二文 计划搭建SQL Server镜像
原文:第三篇--第二部分--第二文 计划搭建SQL Server镜像 本文紧跟上一章:SQL Server镜像简介 本文出处:http://blog.csdn.net/dba_huangzj/arti ...
- 第三篇——第二部分——第六文 监控SQL Server镜像
原文:第三篇--第二部分--第六文 监控SQL Server镜像 原文出处:http://blog.csdn.net/dba_huangzj/article/details/26846203 要优化, ...
随机推荐
- android 无法生成R文件的原因剖析
android 无法生成R文件 是件痛苦的事情,即使有时候你xml文件没有错误,他都无法生成.针对此问题,我总结以下几个方面的原因. 一.xml本身有错误 R.java这个文件是会自动生成的,但是如果 ...
- linux vmstat使用说明
FIELD DESCRIPTION FOR VM MODE Procs r: The number of processes waiting for run time. 表示运行队列,就是说多少个进程 ...
- 2015第24周三Spring事务3
在一个典型的事务处理场景中,有以下几个参与者: Resource Manager(RM) ResourceManager简称RM,它负责存储并管理系统数据资源的状态,比如数据库服务器,JMS消息服务器 ...
- window环境下安装 pip 工具 【pip为Python的扩展管理工具】
Python有一些扩展管理工具,例如easy_install和pip工具,我推荐各位使用pip工具,因为pip工具具有很好的安装和卸载体验. 我们首先需要打开pip的官方网站, 下载必要的文件包,然后 ...
- 第23讲 UI_布局 之相对布局
第23讲 UI_布局 之相对布局 .RelativeLayout(相对布局): RelativeLayout(相对布局)是指组件的位置总是相对兄弟组件.父容器来决定的(相对位置),如某个组件的左边右边 ...
- WebService-使用JDK开发WebService
一.使用JDK开发WebService 2.1.开发WebService服务器端 1.定义一个interface,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所 ...
- 【转】WCF、WebAPI、WCFREST、WebService之间的区别
在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下,你有很多的选择来构建一个HTTP Services.我分享一下我对 ...
- flash与字符串:字符串与属性
有时候,我们想通过设置一个DisplayObject 类是属性值,只是需要通过点来引用即可.有时候,通过字符串也可以引用显示对象里面的属性值. 下面举个例子 . ...
- Spring3 MVC 之 Hello Word
开发工具: MyEclipse 10.0 项目目录: [http://www.cnblogs.com/rhythmK/] 1.新建项目:File->New->Web Project 项 ...
- [置顶] Android安全机制分析
Android系统是基于Linux内核开发的,因此,Android系统不仅保留和继承了Linux操作系统的安全机制,而且其系统架构的各个层次都有独特的安全特性[2] . 1. Linux内核层安全机制 ...