10-SQLServer中统计信息的使用

一、总结

1.网址
https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-stats-transact-sql?view=sql-server-2017(sys.stats)
2.什么是统计信息?
  统计信息描述了表格或者索引视图中的某些列的值的分布情况,属于数据库对象.

3.根据统计信息,查询优化器就能评估查询过程中需要读取的行数以及结果集情况,同时也能创建高质量的查询计划.其实统计信息就是对表的各个字段的总体数据进行分段分布,数据库默认会自动维护.
4.当表的某列第一次作为条件查询时,将创建单列的统计信息,名称以_WA开头,可以通过sys.stats视图查看.
5.当创建索引时,将创建同名的统计信息.索引中,统计信息只统计首列,因此索引除了按首列排序存储数据外,其统计信息也是按首列计算统计的,所以索引设计时定义首列非常重要.

6.临时表上可以有统计信息,其维护策略和普通表一样,但是表变量上不能创建统计信息.

7.SSMS中查看表的统计信息

8.查看统计信息是否自动更新

二、用到的SQL

1.列出表的所有统计信息
命令: select * from run.sys.stats where object_id=object_id(‘run.dbo.T1‘)

2.查看统计信息及其对应的列
命令: select s.name as statistics_name ,c.name as column_name ,sc.stats_column_id
from run.sys.stats as s
inner join run.sys.stats_columns as sc on s.object_id=sc.object_id and s.stats_id=sc.stats_id
inner join run.sys.columns as c on sc.object_id=c.object_id and sc.column_id=c.column_id
where s.object_id=object_id(‘run.dbo.bcp_bj_orderrec‘)

3.DBCC SHOW_STATISTICS()查看统计信息
命令: dbcc show_statistics(‘run.dbo.bcp_bj_orderrec‘,‘_WA_Sys_00000002_5595C582‘)

注:主要分为三部分,"统计信息头部","密度向量","直方图"
(1)统计信息头部信息

(2)密度信息

(3)直方图

4.用脚本设置统计信息

命令: alter database run set auto_create_statistics on with no_wait

5.创建统计信息

命令:create statistics serveridtest on run.dbo.bcp_bj_orderrec(serverid) with fullscan;

6.更新整个库上的统计信息

命令: exec sp_updatestats

7.更新整个表的统计信息

命令:update statistics run.dbo.T1

8.更新指定的的统计信息

命令:update statistics run.dbo.T1 [_WA_Sys_00000001_0EA330E9]

9.删除统计信息

命令:drop statistics dbo.T1.[_WA_Sys_00000001_0EA330E9]

原文地址:https://www.cnblogs.com/jialanyu/p/11578509.html

时间: 2024-11-12 00:03:14

10-SQLServer中统计信息的使用的相关文章

MySQL 8.0 中统计信息直方图的尝试

直方图是表上某个字段在按照一定百分比和规律采样后的数据分布的一种描述,最重要的作用之一就是根据查询条件,预估符合条件的数据量,为sql执行计划的生成提供重要的依据. 在MySQL 8.0之前的版本中,MySQL仅有一个简单的统计信息却没有直方图,没有直方图的统计信息可以说是没有任何意义的. MySQL 8.0新特性之一就是开始支持统计信息的直方图,这个概念很早就提出来了,抽空具体尝试了一下使用方法. 之前写过MSSQL相关统计信息的一点东西,在原理上都是一致的, 照旧,直接上例子,造数据,创建一

SQL Server 中统计信息直方图中对于没有覆盖到谓词预估以及预估策略的变化(SQL2012-->SQL2014-->SQL2016)

原文:SQL Server 中统计信息直方图中对于没有覆盖到谓词预估以及预估策略的变化(SQL2012-->SQL2014-->SQL2016) 本文出处:http://www.cnblogs.com/wy123/p/6770258.html 统计信息写过几篇了相关的文章了,感觉还是不过瘾,关于统计信息的问题,最近又踩坑了,该问题虽然不算很常见,但也比较有意思.相对SQL Server 2012,发现在新的SQL Server版本(2014,2016)中都有一些明显的变化,下文将对此进行粗浅的

SQLSERVER中统计所有表的记录数

利用系统索引表sysindexes中索引ID indid<1的行中的rows列存有该表的行数这一特点.    最后一种方法是利用隐藏未公开的系统存储过程sp_MSforeachtable CREATE TABLE #temp (TableName VARCHAR (255), RowCnt INT) EXEC sp_MSforeachtable 'INSERT INTO #temp SELECT ''?'', COUNT(*) FROM ?' SELECT TableName, RowCnt F

第十二章——SQLServer统计信息(1)——创建和更新统计信息

原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索引供查询之用,因为SQLServer优化器是基于开销的优化.当在where和on上的列上的数据需要显示在结果集的时候,如果有实时的统计信息,优化器会选择最好的执行方式,因为优化器会从统计信息中获得这些数据的明细情况. 在创建索引的时候,SQLServer就会在索引列上创建统计信息.简单来说,统计信息

通过手动创建统计信息优化sql查询性能案例

本质原因在于:SQL Server 统计信息只包含复合索引的第一个列的信息,而不包含复合索引数据组合的信息 来源于工作中的一个实际问题, 这里是组合列数据不均匀导致查询无法预估数据行数,从而导致无法选择合理的执行计划导致性能低下的情况 我这里把问题简单化,主要是为了说明问题 如下一张业务表,主要看两个“状态”字段,BusinessStatus1 和 BusinessStatus2 create table BusinessTable ( Id int identity(1,1), Col2 va

全废话SQL Server统计信息(2)——统计信息基础

接上文:http://blog.csdn.net/dba_huangzj/article/details/52835958 我想在大地上画满窗子,让全部习惯黑暗的眼睛都习惯光明--顾城<我是一个任性的孩子> 这一节主要介绍一些理论层面的东西,主要针对SQL Server,为后面的做铺垫.假设从实操层面考虑能够跳过,可是我强烈建议还是要找时间看一下这节.本节的内容例如以下: SQL Server统计信息 列级统计信息 统计信息与运行计划 统计信息与内存分配 开销预估模型 SQL Server统计

Oracle 统计信息介绍

统计信息自动执行需要以下条件满足: dba_autotask_task 字段status值ENABLED dba_autotask_client 字段status值ENABLED dba_autotask_window_clients 字段AUTOTASK_STATUS值ENABLED OPTIMIZER_STATS值ENABLED WINDOW_ACTIVE值FALSE dba_scheduler_windows 字段ENABLED值TRUE 字段ACTIVE值FALSE 字段DURATION

性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项 (转载)

原文译自:http://www.mssqltips.com/sqlservertip/2766/sql-server-auto-update-and-auto-create-statistics-options/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=2012913 统计信息是如何提高SQLServer查询性能的?统计直方图用作在查询执行计划中查询优化器的选择依据.

SQLServer中使用扩展事件获取Session级别的等待信息以及SQLServer 2016中Session级别等待信息的增强

本文出处:http://www.cnblogs.com/wy123/p/6835939.html 什么是等待 简单说明一下什么是等待:当应用程序对SQL Server发起一个Session请求的时候,这个Session请求在数据库中执行的过程中会申请其所需要的资源,比如可能会申请内存资源,表上的锁资源,物理IO资源,网络资源等等,如果当前Session运行过程中需要申请的某些资源无法立即得到满足,就会产生等待.SQL Server会以不用的方式来展现这个等待信息,比活动Session的等待信息,