MySQL(InnoDB剖析):---B+树索引(聚集索引与非聚集索引(辅助索引))、B+树索引的分裂

本文深入探讨了MySQL的InnoDB和MyIASM存储引擎在B+树索引方面的差异,以及聚集索引(主键索引)和辅助索引(非聚集索引)的工作原理。分析了B+树索引的分裂过程,展示了不同场景下的索引操作。
摘要由CSDN通过智能技术生成

小伙伴们大家好!今天是大年三十,给大家拜个早年!在此小弟祝各位大哥们与家人团团圆圆,和和睦睦,新的一年身体健康,工作顺利!

一、B+树索引概述

  • B+树索引的本质就是B+树在数据库中的实现。但是B+索引在数据库中有一个特点就是高扇出性,因此在数据库中B+树的高度一般都在2~4层,也就是说查找某一键值的行记录最多只需要2~4次IO。因为当前一般的机械磁盘每秒至少可以做100次IO,2~4次IO意味着查询时间只需0.02~0.04秒

B+树的大致工作原理

  • 先抛开各种实现细节,来说一说B+树索引的大致工作原理
  • 工作原理如下
    • 假设现在是主键索引表,一个表中有0、1、2、3、4、5、6、7、8八个主键
    • 那么在B+树中,其叶子节点存储的是这些主键
    • 当我们select * from table where id >1 and id <7的时候,那么会先从B+树的根节点开始向下查找,查找到1这个节点之后,由于底层节点之间是链表形式组织的,因此主键向右进行查找,从而查找到2、3、4、5、6这几个节点
    • insert、update、delete这些都是相同的原理

InnoDB和MyIASM的B+树之间有什么差别

  • InnoDB和MyIASM都支持B+树索引,那么它们之间的区别是什么呢?
    • InnoDB其叶子节点存储不仅存储着主键的值,并且还存储着该主键对应的行数据。因此,其每个叶子节点=主键+整行数据值
    • MyIASM其叶子节点也是存储着主键的值,但是其不存储该主键对应的行数据,其存储的是指向该行数据对应的地址。当我们查找到该主键值,再通过该指针查找到对应地址上的值

面试题:MyIASM与InnoDB通过B+数索引操作数据,哪一个更快?

  • 规则为
    • 当操作的数据量不多时,可能两者没什么差别
    • 当操作的数据量较大时,那么InnoDB比MyIASM快
  • 解释如下
    • InnoDB从磁盘读取数据在内存中构造一棵B+树,由于其B+树叶子节点存储的都是数据的值,因此其数据直接存储在内存中
    • MyIASM从磁盘读取数据在内存中构造一棵B+树,由于其B+树叶子节点只存储数据对应的指针,不存储值,因此其不会将数据读取都内存中
    • 所以当数据量不多时,两者没什么区别:因为数据量小,InnoDB直接从内存中取数据,MyIASM通过指针去磁盘中查找数据,效率差别不大
    • 当操作的数据量较大时,InnoDB直接从内存中取数据,那么速度较快,但是MyIASM需要不断的通过指针去磁盘中取数据,从而导致速度较慢

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值