MySQL进阶【二】—— 一文讲清楚为什么MySQL选择B+树索引

本文详细介绍了MySQL中常用的索引结构,包括B树、Hash和B+树的特点及应用场景,并对比了InnoDB和MyISAM两种存储引擎的索引差异。通过本文,读者可以了解不同索引的工作原理及其对查询性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL的几种索引结构

https://www.cs.usfca.edu/~galles/visualization/BST.html 数据结构的一个学习网站

传送门:
MySQL进阶【一】—— 一条SQL是如何执行的 https://blog.youkuaiyun.com/shehuinidaye/article/details/108690037
MySQL进阶【三】—— Explain详解与实战https://blog.youkuaiyun.com/shehuinidaye/article/details/108692631
MySQL进阶【四】—— MySQL索引优化实战https://blog.youkuaiyun.com/shehuinidaye/article/details/108782534

B树

  • B树在MySQL的结构
    在这里插入图片描述

1、叶子节点具有相同的深度,叶子阶段的指针都为空
2、叶子节点和跟节点,均挂有数据块(因所有节点都挂有数据块,大大降低了索引树存储索引的数量)
3、所有索引不重复
4、节点从左到右是递增的

Hash

在这里插入图片描述

1、数组+链表的实现方式(与Java中的hashmap类似)
2、对索引key进行一次hash运算就可以定位到数据的存储位置
3、查询性能搞,但不支持范围查询,只能满足 等值查询和in查询
4、hash冲突后,链表过长会导致索引搜索性能下降

B+树

  • MySQL中最常用和最好用的索引结构
    在这里插入图片描述

1、非叶子节点不存储数据,只存储索引,可以存放更多的索引
2、叶子节点包含所有索引字段,并且叶子节点存储左右两侧数据库的指针,提高范围查询的性能

Innodb和Myisam引擎的索引结构区别

Innodb 的索引结构

1、主键索引是聚簇索引,叶子节点存储主键索引和数据集
2、二级索引是非聚簇索引,叶子只存储索引字段和主键
3、Innodb的数据文件有两个,.frm是表结构文件,.ibd是索引和数据存储的文件
主键索引结构在这里插入图片描述
二级索引机构在这里插入图片描述
联合索引结构在这里插入图片描述

Myisam的索引结构

1、主键索引是非聚簇索引,叶子节点存储主键索引和数据集的地址
2、二级索引是非聚簇索引,叶子节点存储索引字段和主键
3、Myisam的数据文件有3个,.frm是表结构,.myi是索引文件,.myd是数据文件
在这里插入图片描述

结语
  • MySQL的数据查询过程,二级索引需要回表到主键索引才可以查询出数据
  • MySQL加载索引时,按页加载,一个索引页16K,所以三层索引树,可以支持2000万左右的数据查询。
  • 索引是一个有序的数据结构,当有序性被打破时,索引不生效。例如在字段上加函数、左侧模糊查询、联合索引不符合最左前缀等,皆是无法找到有序的索引树。(左侧模糊匹配时,无法知道字段左侧还存在多少字符,无法利用已知的索引去匹配,只能全表扫描)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值