zoukankan      html  css  js  c++  java
  • 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

    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数

  • 相关阅读:
    大型网站的数据库分割问题。
    大型网站的数据库分割问题。
    分布式集群的Session问题
    大型网站架构设计摘要
    大型网站的架构概要
    公司产品的优势
    java.util.concurrent 学习笔记(2) 线程池基础
    《Java 7 并发编程指南》学习概要 (6) Fork/Join
    《Java 7 并发编程指南》学习概要 (5) 线程池
    《Java 7 并发编程指南》学习概要 (4) 并发集合
  • 原文地址:https://www.cnblogs.com/jialanyu/p/11578509.html
Copyright © 2011-2022 走看看