MySQL源码学习:索引使用统计功能

日期: 2011-07-04 作者:丁林 来源:TechTarget中国 英文

  今天刚刚知道Oracle有个索引统计的功能,可以统计每个索引的使用次数。作为一个Oracle的门外汉,我还是再次感叹人家做的是真细致。第二个想法就是给MySQL也加上。

  Percona版本的information_schema.innodb_index_stats 已经有索引的统计信息,我们就在巨人的肩膀上踩一脚了。

  先来看下原来的表结构。

  CREATE TEMPORARY TABLE `INNODB_INDEX_STATS` (
  `table_schema` varchar(192) NOT NULL DEFAULT ”,
  `table_name` varchar(192) NOT NULL DEFAULT ”,
  `index_name` varchar(192) NOT NULL DEFAULT ”,
  `fields` bigint(21) unsigned NOT NULL DEFAULT ‘0’,
  `rows_per_key` varchar(256) NOT NULL DEFAULT ”,
  `index_total_pages` bigint(21) unsigned NOT NULL DEFAULT ‘0’,
  `index_leaf_pages` bigint(21) unsigned NOT NULL DEFAULT ‘0’
  ) ENGINE=MEMORY DEFAULT CHARSET=utf8

  记录的是每个索引的信息,其中index_total_pages是一个索引的所有page数,index_leaf_pages其中的叶子page数。从这两个数据基本上可以描绘一棵btree的大小了。从其中的比例关系也可以看到为什么亿级别的数据只要三层索引了,这是题外话。

  然后我们要作的事情就是在这个“表”加一列,统计索引被使用的次数。其中的信息当然需要在执行时统计。所幸的是InnoDB每次使用索引都是统一的入口(index_read), 就在index里面加个字段统计。如果要精确还得加个锁,不过作为统计信息,也可以不要那么精确,直接累积了,这样对性能就没有影响。

  修改后就长这样了。

  

 
点击放大

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

丁林
丁林

相关推荐