MySQL统计信息相关表介绍

以前给大家介绍过MySQL中的统计信息,相信大家也都了解了。那么统计信息是存放在哪里呢?我们怎么去查看?

在MySQL中提供了两个表记录统计信息的相关内容,分别是 innodb_table_stats与innodb_index_stats。下面就这两个表的内容,与大家进行一些分享。

innodb_table_stats

这个表里面的内容还是比较好理解

重要的列:

  • last_update 就是最后一次收集统计信息的时间
  • clustered_index_size 聚集索引的page数量
  • sum_of_other_index_sizes 非聚集索引的page数量

通过这些信息我们可以算出聚集索引的大小:

innodb_index_stats

这个表里面输出的内容相对会比较复杂一些。

表结构和测试数据:

我们主要关注的的列:

  • stat_value: 显示统计值的大小
  • stat_description:类型的描述
  • stat_name:此列显示统计的类型 , 会出现下面这些:
  • size:此时stat_value显示索引的page数量
  • n_leaf_pages:此时stat_value显示叶子节点的数量
  • n_diff_pfxNN:显示索引字段上唯一值的数量,这里需要特殊说明:
  • 主键索引与唯一索引 例如上面结果中index_name = PRIMARY时:
  1. index_name = PRIMARY 且 stat_name = n_diff_pfx01 则stat_value代表主键索引中第一列distinct之后的数量,从上面的例子我们看到stat_value是1,因为a这一列的值都是(1)
  2. index_name = PRIMARY 且 stat_name = n_diff_pfx02 则stat_value代表主键索引中第一列和第二列distinct之后的数量,从上面的例子我们看到stat_value是5,因为a,b两列存在的值是(1,1)(1,2)(1,3)(1,4)(1,5)
  3. stat_description中我们可以看到是那几个列的信息
  4. n_diff_pfxNN 以此类推
  • 非唯一索引不同的地方是在原有的列之后会添加上主键索引,这样说可能比较难理解,针对上面查询出来的记过下面详细说明下:
  1. 根据表结构定义我们知道i1是一个非唯一索引,是由(c,d)两个列组成的。我们根据上面的结果可以看到除了n_diff_pfx01,n_diff_pfx02又多出来了n_diff_pfx03,n_diff_pfx04 ,通过stat_description我们可以看到n_diff_pfx03,n_diff_pfx04是在原有的(c,d)两列上又多出了 (c,d,a) (c,d,a,b) 这里就是将主键索引添加到了这里。
  2. 例如 n_diff_pfx03 的stat_value是2 代表的就是在原有的非唯一索引上添加了主键索引的第一列(a), 这个时候distinct之后的值是2 所存在的值就是: (10,11,1) (10,12,1)

通过这个表我们可以查看索引选择性如何,并且可以看到组合索引中每一列选择性如何,还可以计算索引的大小:

总 结

数据库中的一些系统表对DBA是非常重要的,可以帮助我们排查问题、性能分析、去更好的了解一些机制。

innodb_table_stats与innodb_index_stats两张表我们可以了解统计信息、计算索引的大小、索引的选择性如何,也可以做到监控中。

通过5.7的MySQL中添加了Sys Schema也就是让大家不用通过去查看代码的方式去排查各种问题、故障处理等,可见对系统表的学习在日后会更重要。

参考资料:

https://dev.mysql.com/doc/refman/5.7/en/innodb-persistent-stats.html

原文发布于微信公众号 - 沃趣科技(woqutech)

原文发表时间:2017-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Samego开发资源

MySQL命令行备份数据库

2386
来自专栏程序员的SOD蜜

获取SqlServer存储过程定义的3种方法

第一种: declare @p_text varchar(max) SELECT @p_text= text FROM syscomments WHERE...

2527
来自专栏博客园迁移

几种事务的隔离级别,InnoDB如何实现?

隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离。

771
来自专栏互联网杂技

mysql主键primary key与唯一键unique key

主键 每张表中只能有一个主键 主键自动回not null 主键的设置方式是创建的时候加上:primary key 一般主键设置为自动增加,auto_increm...

35615
来自专栏我的博客

ES中的索引管理

一、创建索引 如果需要手动创建索引,则需要更改配置当中 action.auto_create_index: false 二、删除索引 DELETE  /i...

55912
来自专栏电光石火

PHP从数据库提取并显示数据的典型代码

PHP从数据库提取并显示数据的典型代码如下: if ($res=mysql_query($sql)) { //数据库查询执行成功 ...

2118
来自专栏WindCoder

通过Mysql数据库批量修改WordPress的URL地址

更换个域名,文章的地址有时不会跟着改变,之前遇到过一次,今天又遇到了,就暂且记录一个以备日后使用,由于网上资源很多,就不在写明原创作者了O(∩_∩)O~(主要是...

3032
来自专栏LeeCen

Ubuntu 环境下远程连接 MySQL 数据库

然后打开 vi /etc/mysql/mysql.conf.d/mysqld.cnf

1901
来自专栏nummy

python中MySQLdb模块用法实例

MySQLdb提供了connect方法用来和数据库建立连接,接收数个参数,返回连接对象:

781
来自专栏有困难要上,没有困难创造困难也要上!

Oracle12c创建用户

4002

扫码关注云+社区

领取腾讯云代金券