注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

查看InnoDB表每个索引的高度?

我们知道InnoDB表是索引组织表,分为聚集索引和二级索引,但不管哪种索引,其结构都是B+树结构。由于InnoDB B+树结构高扇区特性,所以每个索引高度基本在3-4层之间,如果数据量比较大,页比较小,如4K,那么高度也是可能破4的。问题来了,以上说法都是我们根据理论知识计算得出的结果,那么在InnoDB中如何查看每个索引的高度呢?InnoDB也没有提供相应……继续阅读 »

彭东稳 5个月前 (08-01) 1840浏览 0评论 0个赞

堆表(HOT)和索引组织表(IOT)的区别

一、HOT和IOT的起源 堆组织表的存储速度因为不用考虑排序,所以存储速度会比较快。但是要查找符合某个条件的记录,就必须得读取全部的记录以便筛选。而这个时候为了加快查询速度,索引就出现了,索引是针对少量特定字段的值拿出来进行排序存储,并记录在表中的位置,而因为索引是有序的,所以就会很容易通过索引查询到具体的记录位置(普遍使用二分查找法),然后再根据记录位置直……继续阅读 »

彭东稳 5个月前 (08-01) 1334浏览 0评论 0个赞

使用innodb_ruby分析InnoDB内部结构

一、innodb_ruby介绍 如果你想了解MySQL InnoDB内部结构,不好意思,官方在5.7版本之前并没有什么好的工具。所以你只能自己写一个工具去分析表空间文件或使用别人开源的工具,比如innodb_ruby。在MySQL 5.7版本,官方加强了innochecksum工具,使之也可以简单分析表空间,比如查看页类型统计信息等。但跟Jeremy Col……继续阅读 »

彭东稳 8个月前 (04-19) 4437浏览 1评论 0个赞

MySQL InnoDB离线校验工具innochecksum使用

innochecksum工具可以打印InnoDB文件的校验值,该工具读取InnoDB表空间文件,计算每个页面的校验值,将计算的校验值与存储的校验值进行比较,并报告指示损坏页面的不匹配。它最初是为了加速验证断电后表空间文件的完整性而开发的,也可以在文件复制后使用。由于校验值不匹配导致InnoDB故意关闭正在运行的服务器,因此最好使用此工具而不是等待生产服务器遇……继续阅读 »

彭东稳 1年前 (2017-11-23) 6473浏览 0评论 2个赞

MySQL InnoDB锁信息阅读

下面主要分析一下InnoDB加锁的详细信息,主要用于分析一条语句的详细加锁结构以及加了什么锁。 记得先打开InnoDB monitor中的锁详细信息输出,只在MySQL下有用,在MariaDB下不起作用。 set GLOBAL innodb_status_output=ON; set GLOBAL innodb_status……继续阅读 »

彭东稳 1年前 (2017-10-25) 5475浏览 1评论 4个赞

MySQL InnoDB索引选择性与统计信息

一、什么是索引选择性? 既然索引可以加快查询速度,那么是不是只要是查询语句需要,就建上索引?答案是否定的。因为索引虽然加快了查询速度,但索引也是有代价的:索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。一般两种情况下不建议建索引。 第一种情况是表记录比较少,例如一两……继续阅读 »

彭东稳 1年前 (2017-09-21) 8474浏览 7评论 9个赞

MySQL InnoDB联合索引学习

联合索引是指对表上的多个列进行索引,其创建方法与单个索引一样,不同之处仅在于有多个索引列。例如,以下代码创建了一张t表,并且索引idx_a_b是联合索引,联合的列为(a,b)。 create table t( a int, b int, primary key(a), key idx_a_b(a,b) ……继续阅读 »

彭东稳 1年前 (2017-09-11) 5529浏览 0评论 6个赞

MySQL InnoDB磁盘I/O优化

一、SQL简易执行流程 查询(如SELECT) 1. 客户端发送一条查询给服务器; 2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段; 3. 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划; 4. MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询; 5. 如果buffer poo……继续阅读 »

彭东稳 1年前 (2017-09-04) 8804浏览 3评论 5个赞

MySQL索引原理及SQL优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少……继续阅读 »

彭东稳 1年前 (2017-08-28) 6175浏览 0评论 8个赞

MySQL InnoDB故障恢复流程

InnoDB如果发生意外宕机了,数据会丢么?对于这个问题,稍微了解一点MySQL知识的人,都会斩钉截铁的回答:不会!为什么?他们也会毫不犹豫的说:因为有重做日志(redo log),数据可以通过redo log进行恢复。回答得很好,那么InnoDB怎样通过redo log进行数据的恢复的,具体的流程是怎样的?估计能说清楚这个问题的人剩的不多了,更深入一点:除……继续阅读 »

彭东稳 1年前 (2017-07-06) 7946浏览 2评论 7个赞

MySQL InnoDB MVCC实现原理

数据多版本(MVCC)是MySQL实现高性能的一个主要的方式,InnoDB为了实现多版本的一致读,采用的是基于回滚段的协议。通过对普通的SELECT不加锁,直接利用MVCC读取指版本的值,避免了对数据重复加锁的过程,今天我们就用最简单的方式,来分析下MVCC具体的原理,先解释几个概念: 一、行结构 InnoDB表数据的组织方式为主键聚簇索引。由于采用索引组织……继续阅读 »

彭东稳 1年前 (2017-07-06) 6786浏览 1评论 2个赞

MySQL InnoDB聚簇及辅助索引

一、B+树索引 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成? 我们都知道CPU是很快的,磁盘是很慢的,……继续阅读 »

彭东稳 2年前 (2017-05-31) 9486浏览 0评论 7个赞