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,找到后直接把后面/前面所有数据全部返回。
想都是问题,做都是答案,站着不动永远是观众。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)