mysql学习(2)

一、B树、B+树

官方文档里说到,B树根节点指向叶子节点,但是人们忘了叶子节点可以互相指向,于是B+。

create table t1(
a int primary key,
b int,
c int,
d int,
e varchar(20)
)engine=InnoDB;

操作系统页单位4KB,mysql页单位16KB(逻辑单位,逻辑上一次取这么大)。如果按行读取时,相当于每次读一条记录进行一次磁盘IO,加载到内存。

如果以页为单位进行加载,4B*4+4B=20B(一条记录的大小),于是查一条目标数据,按页加载到内存,在内存进行查找,只进行了一次IO。

按自增索引插入,不用来回更改指针。如果数据记录很多,那么就遍历数据太多,于是有了增加了 目录。(空间换时间)

在InnoDB中,将6条记录为一组 ,这样查询时就可根据页目录跳过一些不符合的。

数据大了,页分裂,由指针连接页。当页多时,每一次查询页相当于进行一次磁盘IO,于是又需要查一个链表

 

解决方法:空间换时间,增加一个空间(索引页,管理信息、优化性能)放每页的第一个索引值。

全表扫描:叶子节点从左往右全表扫

走索引:从上往下走

mysql为了支持范围查找,设的双向链表

如果执行a>/<5,会先执行a=5,找到后直接把后面/前面所有数据全部返回。

posted @   Anne起飞记  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示