MyISAM主键索引树和二级索引树

专栏持续更新中:MySQL详解

MyISAM:数据和索引没有放在一块,叫做 非聚集索引,不可能回表

InnoDB:数据和索引存放在一块,叫聚集索引 ,会涉及回表

此时假设一个场景:uid是主键,有主键索引树,name有索引,创建二级索引树

当前场景下的主键索引树如下,B+树非叶子节点上只有索引值,叶子节点上有索引值和数据地址

MyISAM索引树原理图如下:

当前场景下的二级索引树如下:

InnoDB二级索引树叶子节点上是主键值uid,而MyISAM存的则是数据的地址

当前场景下,主键索引树和二级索引树两者之间的联系:

在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复,MyISAM二级索引树结构图如下:

当前场景下,若使用MyISAM存储引擎查找数据,以name作为索引,到二级索引树上查找结果(构造索引树的过程也涉及磁盘I/O),如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。

MyISAM存储引擎,B+树叶子节点存储关键字和数据地址,也就是说索引关键字和数据没有在一起存放,体现在磁盘上,表的数据存放在*.MYD文件中,表的索引存放在*.MYI文件中。

相关推荐
羊小蜜.3 分钟前
Mysql 01:基础查询(SELECT)全解——从单表到多字段的完整语法
数据库·mysql·查询
社恐的下水道蟑螂14 分钟前
前端面试必问 Git 通关指南:常用命令速查 + merge/rebase 深度辨析,看完再也不慌
前端·git·面试
猿小喵16 分钟前
记录一次从库并行回放出现死锁的问题
数据库·mysql·tdsql
派星18 分钟前
如何分享自己写的 Go 包
后端
snakeshe101020 分钟前
从零理解 Spring 核心:IoC 容器与依赖注入,以及手写一个迷你版
后端
1486122 分钟前
Redis 删除缓存失败怎么办?重试、死信、补偿的工程化方案
后端
None32122 分钟前
NestJS 流式文件上传实践:从 Multer 到 Busboy 的进阶之路
前端·后端
随风,奔跑23 分钟前
Redis
数据库·redis·缓存
IvorySQL24 分钟前
2MB 的 PostgreSQL work_mem,如何吃掉 2TB 内存?
数据库·postgresql·开源
1486125 分钟前
MySQL 复合索引怎么设计?从业务 SQL 反推索引顺序
后端