MySQL MyISAM和Innodb索引实现原理分析

B+Tree实现原理和基本知识

B+Tree实现原理

MyISAM 索引(叶子节点存放指向记录地址)

MyISAM 引擎使用 B+Tree 作为索引结构,叶节点的 data 域存放的是数据记录的地址
在这里插入图片描述

上图中,我们以Col1为主键primary Key。

  • 对于B+Tree而言,非叶子节点存放的是键值+指向子节点的指针

  • 对于MyISAM而言,在B+Tree中,将叶子节点中的data存放的是实际记录的地址

  • 记录数据并非聚集在叶子节点当中,因此,MyISAM 的索引方式也叫做“非聚集索引”

MyISAM主键索引和辅助索引

上图即为主键索引

在这里插入图片描述

MyISAM的辅助索引其实更主键索引类似

Col2列建立索引,得到的辅助索引结构跟上面的主键索引的结构是相同的。

在这里插入图片描述

Innodb 索引(叶子节点存放记录数据)

Innodb引擎使用 B+Tree 作为索引结构,叶子节点的 data 域存放的是数据记录

在这里插入图片描述

将记录数据放入叶子节点当中,相比MyISAM而言,少一次磁盘IO,因为不用读取叶子节点中指向实际位置中的记录数据

特点

  • 对于B+Tree而言,非叶子节点存放的是键值+指向子节点的指针

  • 对于Innodb而言,在B+Tree中,将叶子节点中的data存放的是实际记录。

  • 记录数据聚集在叶子节点当中,因此,Innodb的索引方式也叫做“聚集索引”

注意:

1、InnoDB 要求表必须有主键(MyISAM 可以没有),如果没有显式指定,则 MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL 自动为 InnoDB 表生成一个隐含字段作为主键,类型为长整形。(innodb支持事务,行锁,外键。MyISAM引擎不支持事务,是表锁)这就是为什么mysql默认使用innodb引擎的原因之一。

通过命令

show engines;

在这里插入图片描述

2、使用 InnoDB ,应该采用自增字段做表的主键。因为索引的实现是B+Tree拥有排序,快速查找的功能。当增加记录时,记录磁盘存储,会在页中增加键值,和指向该节点的指针。如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。每次插入新记录,更新索引不需要,对B+Tree节点进行移动,效率高

在这里插入图片描述

Innodb主键索引和辅助索引

主键索引

在这里插入图片描述

辅助索引

innodb中辅助索引(不是primary Key的索引),跟innodb主键索引差别较大

这次我们以数据表中的Col3列的字符串数据建立辅助索引,我们来看下面的图:

在最底层的叶子结点有两行数据,第一行的字符串是辅助索引,按照ASCII码进行排序,第二行的整数是主键的值

在这里插入图片描述
注意:innodb中的辅助索引,叶子节点中data区域指向的对应主键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白鸽呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值