mysql数据库(2)

发布时间 2024-01-05 21:00:06作者: Anne起飞记

一、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,找到后直接把后面/前面所有数据全部返回。