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文件中。

相关推荐
从零开始的代码生活_12 分钟前
Linux epoll 多路转接详解
linux·运维·网络·后端·tcp/ip·计算机网络·php
IT_陈寒18 分钟前
Vue的响应式更新把我坑惨了,原来是这个原因
前端·人工智能·后端
豆瓣鸡20 分钟前
Spring Boot 全局异常处理与参数校验
spring boot·后端
名字还没想好☜22 分钟前
Go 并发实战:用 channel 实现 worker pool
java·数据库·后端·golang·go
_abab32 分钟前
Java面试宝典:从基础到架构2
java·面试·架构
源图客1 小时前
Claude Code基础使用
服务器·前端·数据库
布朗克1681 小时前
Go 入门到精通-09-复合类型之Map
开发语言·后端·golang·map
程序员爱钓鱼1 小时前
Rust 开发环境安装(Windows|macOS|Linux)
后端·rust
爱勇宝10 小时前
第 1 章:别把“需求文档”当成真正的需求
前端·后端·程序员
白帽小丑10 小时前
# 一次 MySQL DELETE 误操作的数据恢复尝试实录
数据库·mysql