SQL SERVER的统计信息
可以看到,统计信息分为三部分内容,头信息,数据字段选择性及直方图。
2.1 头信息
列名 | 说明 |
Name | 统计信息的名称。 |
Updated | 上次更新统计信息的日期何时间 |
Rows | 预估表中的行数,不一定是精确的 |
Rows Sampled | 统计信息的抽样行数,如果小于Rows,则说明直方图和密度结果是更加抽样行估计的 |
Steps |
直方图中的梯级数。 Number of steps in the histogram. 每个梯级都跨越一个列值范围,后跟上限列值。 直方图梯级是根据统计信息中的第一个键列定义的。 最大梯级数为 200。 |
Density | 计算公式为 1/统计信息对象第一个键列中的所有值(不包括直方图边界值)的非重复值。 查询优化器不使用此 Density 值,显示此值的目的是为了与 SQL Server 2008 之前的版本实现向后兼容。 |
Average key length | 统计信息对象中所有键列的每个值的平均字节数。 |
String Index |
Yes 指示统计信息对象包含字符串摘要统计信息,以改进对使用 LIKE 运算符的查询谓词的基数估计;例如 WHERE ProductName LIKE '%Bike'。 Yes indicates the statistics object contains string summary statistics to improve the cardinality estimates for query predicates that use the LIKE operator; for example, WHERE ProductName LIKE '%Bike'. 字符串摘要统计信息与直方图分开存储,并当它是类型的统计信息对象第一个键列上创建char, varchar, nchar, nvarchar, varchar (max), nvarchar (max),文本,或ntext。 |
Filter Expression | 包含在统计信息对象中的表行子集的谓词。 NULL = 未筛选的统计信息。 有关筛选的谓词的详细信息,请参阅Create Filtered Indexes。 有关筛选的统计信息的详细信息,请参阅统计信息。 |
Unfiltered Rows | 应用筛选表达式前表中的总行数。 如果筛选表达式为 NULL,则 Unfiltered Rows 等于 Rows。 |
2.2 数据字段选择性
列名 | Description |
Density | 密度为 1/非重复值。 结果显示统计信息对象中各列的每个前缀的密度,每个密度显示一行。 非重复值是每个行前缀和列前缀的列值的非重复列表。 例如,如果统计信息对象包含键列 (A, B, C),结果将报告以下每个列前缀中非重复值列表的密度:(A)、(A,B) 以及 (A, B, C)。 使用前缀 (A, B, C),以下每个列表都是一个非重复值列表:(3, 5, 6)、(4, 4, 6)、(4, 5, 6) 和 (4, 5, 7)。 使用前缀 (A, B),相同列值则具有以下非重复值列表:(3, 5)、(4, 4) 和 (4, 5) |
Average Length | 存储列前缀的列值列表的平均长度(以字节为单位)。 例如,如果列表 (3, 5, 6) 中的每个值都需要 4 个字节,则长度为 12 个字节。 |
columns | 为其显示 All density 和 Average length 的前缀中的列的名称。 |
2.3 直方图
列名 | Description |
---|---|
RANGE_HI_KEY | 直方图梯级的上限列值。 列值也称为键值。 |
RANGE_ROWS | 其列值位于直方图梯级内(不包括上限)的行的估算数目。 |
EQ_ROWS | 其列值等于直方图梯级的上限的行的估算数目。 |
DISTINCT_RANGE_ROWS | 非重复列值位于直方图梯级内(不包括上限)的行的估算数目。 |
AVG_RANGE_ROWS | 重复列值位于直 方图梯级内(不包括上限)的平均行数(如果 DISTINCT_RANGE_ROWS > 0,则为 RANGE_ROWS / DISTINCT_RANGE_ROWS)。 |
3 影响统计信息的选项
每个表格或者索引视图 何时创建统计信息、基于哪些列创建统计信息及何时更新统计信息,需要根据 AUTO_CREATE_STATISTICS 、 AUTO_UPDATE_STATISTICS、 AUTO_UPDATE_STATISTICS_ASYNC 的设定值 来确定,这三个属于 数据库级别的选项,可以通过系统视图查看,也可以通过 图形界面选择数据库的“属性”,查看“选项”。
![](/assets/blank.gif)
1 --查看数据库统计信息选项设定值 2 SELECT 3 name dbname, 4 is_auto_create_stats_on, 5 is_auto_update_stats_on, 6 is_auto_update_stats_async_on 7 FROM sys.databases
![](/assets/blank.gif)
3.1 AUTO_CREATE_STATISTICS
![](/assets/blank.gif)
1 SELECT OBJECT_NAME(s.object_id) AS object_name, 2 COL_NAME(sc.object_id, sc.column_id) AS column_name, 3 s.name AS statistics_name 4 FROM sys.stats AS s JOIN sys.stats_columns AS sc 5 ON s.stats_id = sc.stats_id AND s.object_id = sc.object_id 6 WHERE s.name like '_WA%' 7 ORDER BY s.name;
![](/assets/blank.gif)
3.2 AUTO_UPDATE_STATISTICS
3.3 AUTO_UPDATE_STATISTICS_ASYNC
- 应用程序贫富执行相同查询或者类似查询,与同步统计信息更新相比,使用异步统计信息更新查询的响应时间可以不受影响,避免出现等待最新统计信息的情况;
- 应用程序遇到了客户端请求超时,这些超时是由于一个或多个查询正在等待更新后的统计信息所导致的。 在某些情况下,等待同步统计信息可能会导致应用程序因过长超时而失败。
4 何时创建与更新
4.1 创建
- 查询优化器自动创建
- 创建索引时,查询优化器自动为表格或者视图上的索引创建统计信息
- 在 AUTO_CREATE_STATISTICS 为 ON 时,查询优化器为查询谓词中的单列创建统计信息
- 手动执行创建
- CREATE STATISTICS 创建
常规情况下,查询优化器创建的统计信息就可以满足我们的大多数需求,但是如果出现以下情况,可以考虑手动创建:
- 数据库引擎优化顾问建议创建
- 查询谓词包含尚不位于相同索引中的多个相关列
- 查询从数据的子集中选择数据
- 查询缺少统计信息
4.2 更新
- - 表格从没有数据变成大于等于1条数据;
- - 对于数据量小于500行的表格,当统计信息的第一个字段数据累计变化量大于500以后;
- - 对于数据量大于500行的表格,当统计信息的第一个字段数据累计变化量大于500+(20%*表格数据总量)以后。
![](/assets/blank.gif)
1 --更新指定统计信息2 UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;3 GO4 5 --更新表格上的所有统计信息6 UPDATE STATISTICS Sales.SalesOrderDetail;7 GO8 9 --更新整个数据库上的所有统计信息 10 EXEC sp_updatestats; 11 12 --删除统计信息 13 DROP STATISTICS Purchasing.Vendor.VendorCredit, Sales.SalesOrderHeader.CustomerTotal; 14 GO 15 16 --查看统计信息上一次更新时间 17 18 SELECT 19 OBJECT_NAME(OBJECT_ID) 20 FROM sys.stats 21 WHERE STATS_DATE(object_id, stats_id) is not null
![](/assets/blank.gif)
参考资料:https://msdn.microsoft.com/zh-cn/library/ms174384.aspx
转载于:https://www.cnblogs.com/zhaolizhe/p/6953856.html
SQL SERVER的统计信息相关推荐
- SQL Server 查找统计信息的采样时间与采样比例
SQL Server 查找统计信息的采样时间与采样比例 原文:SQL Server 查找统计信息的采样时间与采样比例 有时候我们会遇到,由于统计信息不准确导致优化器生成了一个错误的执行计划(或者这样表 ...
- 使用数据库维护计划SQL Server更新统计信息
This article explores SQL Server Update Statistics using the database maintenance plan. 本文探索使用数据库维护计 ...
- sql server表分区_介绍分区表SQL Server增量统计信息
sql server表分区 If you are maintaining a very large database, you might be well aware of the pain to p ...
- sql错误索引中丢失_收集,汇总和分析丢失SQL Server索引统计信息
sql错误索引中丢失 描述 (Description) Indexing is key to efficient query execution. Determining what indexes a ...
- SQL Server 数据库统计信息更新对性能优化的切身体会
年底前在开发一个SQL Server BI项目的过程中,我们测试SSIS包的时候,发现有好几天晚上取数的时间都超出了以前的 取数时间,刚开始我们以为是换了服务器,服务器硬件的性能有差异导致,后来我们仔 ...
- 浅谈SQL Server中统计对于查询的影响
简介 SQL Server查询分析器是基于开销的.通常来讲,查询分析器会根据谓词来确定该如何选择高效的查询路线,比如该选择哪个索引.而每次查询分析器寻找路径时,并不会每一次都去统计索引中包含的行数,值 ...
- asp毕业设计——基于vb+VB.NET+SQL Server的图书馆管理信息系统设计与实现(毕业论文+程序源码)——图书馆管理信息系统
基于vb+VB.NET+SQL Server的图书馆管理信息系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于vb+VB.NET+SQL Server的图书馆管理信息系统设计与实现,文章 ...
- 监控目前所有连接SQL SERVER的用户信息
原文:监控目前所有连接SQL SERVER的用户信息 if object_id('p_getlinkinfo','P')is not null drop proc p_getlinkinfo go c ...
- SQL server删除表信息代码
SQL server删除表信息代码: 1.delete删除: delete * from table--只是删除了表中的内容,并没有把表删除. 2.drop删除: drop table 表名--把整个 ...
最新文章
- 算法设计与分析第5章 回溯法(二)【回溯法应用】
- ubuntu16.04 ROS安转及RVIZ启动
- matlab7.0调节视图,新手求救啊!!!matlab7.0在win7启动后命令窗口出现大段代码!...
- leetcode 95. Unique Binary Search Trees II | 96. Unique Binary Search Trees
- java 移动页面中的图片上传_HTML5移动端图片上传(一)
- python打印字符串的前五行_python基础-字符串(6)
- 自动化测试如何保持登录状态_自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码...
- word排版程序代码
- Redis数据丢失问题
- python excel数据合并_如何用python将excel数据合并
- [渝粤教育] 天津师范大学 教育心理学(唐卫海) 参考 资料
- 第二本书:疯狂人类进化史20190621
- always@(敏感列表)
- 如何选择美颜SDK接口?
- DMS应用性能管理案例分析(二)
- 贪心算法实例(五):小船过河问题
- 根据卫星仰角和方位角使用html5绘制天空图(投影图)
- 点,破折号和花花公子表现得很差
- 2020宁波市多校赛训练biu~
- 大学中明白的一百件事情
热门文章
- oracle votedisk 参数,11g r2 rac votedisk 及 ocr 磁盘破坏后,基于ocr备份的恢复步骤
- Java程序员面试如何超常发挥?
- hexde php_怎样在PHP中把16进制HEX数据转换为2进制数据呢?
- fedora如何隐藏顶部状态栏_如何使用PDF Arranger来对PDF文件进行排版和修改
- 关于Nginx的使用
- 近朱者赤,近墨者还是赤
- 检测不到信号,是加点噪声?还是滤除噪声?
- Chirp信号公式与对离散生成算法之间的差异
- win10 系统安装 服务器失败怎么回事,Win10正式版安装出现问题怎么办
- tp5大数据批量导入mysql_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作