一、总结

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

update statistics test.dbo.T1 with fullscan  --完全扫描

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

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

9.完全扫描,按行数扫描,按百分比扫描更新统计信息

(1).所有现有统计信息,完全扫描
 命令:update statistics run.dbo.T1 with fullscan

(2).仅限列统计信息,按行数抽样更新
 命令:update statistics run.dbo.T1 with sample 50 rows,columns

(3).仅限索引统计信息,按百分比抽样更新
 命令:update statistics run.dbo.T1 with sample 50 percent,index

10.删除统计信息

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

11、查看有索引的表有多少条数据需要更新统计信息

select
ss.name AS SchemaName
,st.name AS TableName
,si.name AS IndexName
,ssi.rowcnt
,ssi.rowmodctr
FROM sys.indexes si
INNER JOIN sys.sysindexes ssi ON si.object_id = ssi.id
AND si.name = ssi.name
INNER JOIN sys.tables st ON st.[object_id] = si.[object_id]
INNER JOIN sys.schemas ss ON ss.[schema_id] = st.[schema_id]
WHERE st.is_ms_shipped = 0
AND si.index_id != 0 --0代表的是堆表
AND ssi.rowcnt > 10

rowcnt:表的总行数

rowmodctr:自上次更新统计信息后,增删改的行数,该值就是需要更新统计信息的count数

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

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

    直方图是表上某个字段在按照一定百分比和规律采样后的数据分布的一种描述,最重要的作用之一就是根据查询条件,预估符合条件的数据量,为sql执行计划的生成提供重要的依据在MySQL 8.0之前的版本中,My ...

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

    本位出处:http://www.cnblogs.com/wy123/p/6770258.html 统计信息写过几篇了相关的文章了,感觉还是不过瘾,关于统计信息的问题,最近又踩坑了,该问题虽然不算很常见 ...

  3. SQLSERVER中统计所有表的记录数

    SQLSERVER中统计所有表的记录数 利用系统索引表sysindexes中索引ID indid<1的行中的rows列存有该表的行数这一特点.    方法是利用隐藏未公开的系统存储过程sp_MS ...

  4. 11G中自动收集统计信息

    在11G中,引入了一个名为 gather_stats_prog 的自动运行任务专用于自动收集统计信息.其对应的客户端名称为"auto optimizer stats collection&q ...

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

    原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索 ...

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

    本质原因在于:SQL Server 统计信息只包含复合索引的第一个列的信息,而不包含复合索引数据组合的信息 来源于工作中的一个实际问题, 这里是组合列数据不均匀导致查询无法预估数据行数,从而导致无法选 ...

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

    接上文:http://blog.csdn.net/dba_huangzj/article/details/52835958 我想在大地上画满窗子,让所有习惯黑暗的眼睛都习惯光明--顾城<我是一个 ...

  8. Oracle11g 统计信息——统计信息自动收集任务

    参考文献: Oracle11g 统计信息(一)-----统计信息自动收集任务 背景: 在使用cacti监控oracle数据库IO的时候发现每天晚上10点钟的时候oracle数据库读写明显增加,如下图所 ...

  9. Oracle 统计信息介绍

      统计信息自动执行需要以下条件满足: dba_autotask_task 字段status值ENABLED dba_autotask_client 字段status值ENABLED dba_auto ...

随机推荐

  1. SQL Server 2019 Linux Docker 在主机上以其他非根用户的身份运行容器

    docker logs mssql2019SQL Server 2019 will run as non-root by default.This container is running as us ...

  2. 运用加密技术保护Java源代码(转)

    出处:运用加密技术保护Java源代码 为什么要加密? 对于传统的C或C++之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以.遗憾的是,Java程序的源代码很容易被别人偷看.只要有一 ...

  3. k8s-部署及介绍

    Kubernetes主要功能:  数据卷 Pod中容器之间共享数据,可以使用数据卷.  应用程序健康检查 容器内服务可能进程堵塞无法处理请求,可以设置监控检查策略保证应用健壮性.  复制应用程序 ...

  4. 怎样解决在执行 vue init 时提示 "vue : 无法加载文件" 的问题?

    注意, 以下操作需要 以管理员身份 在 PowerShell 中进行, 不能是 CMD / Git Bash 等. 1. 以 管理员身份 运行 PowerShell 2. 执行 get-Executi ...

  5. 27-Perl 进程管理

    1.Perl 进程管理Perl 中你可以以不同的方法来创建进程.本教程将讨论一些进程的管理方法. 你可以使用特殊变量 $$ 或 $PROCESS_ID 来获取进程 ID. %ENV 哈希存放了父进程, ...

  6. java——ArrayList中remove()方法疑问总结

    其实remove方法和contains方法大同小异,它的原理和contains方法相同https://www.cnblogs.com/lyxcode/p/9453213.html在这篇博客里面有详细说 ...

  7. workerman stop失败

    1.官网说明:https://www.bookstack.cn/read/workerman-manual/faq-stop-fail.md 2.workerman.pid 中的有一个pid号,置为空 ...

  8. EF入门-CRUD操作

    一.EF数据查询假设我们已经定义好了context:private AccountContext db = new AccountContext(); 1.[基本查询] 查询所有var users = ...

  9. MVC4学习要点记四

    一.使用原生SQL使用EF的一个优点就是自动帮我们生成SQL,这在常规情况下很方便,但有些情况下用EF却不适合.另外还有些特别复杂的语句,利用EF很难生成.所以,EF提供一组方法用来执行原生的SQL. ...

  10. ZROI Day1 比赛解题报告

    ZROI Day1 比赛解题报告 版权原因不提供题面相关信息 序 前天晚上搞得比较晚,然后早上做题很没状态,刚看到T1发现没什么思路就有点慌,赶紧看了看T2,T3, 发现T3暴力很好打,T2想了一想可 ...