一、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,找到后直接把后面/前面所有数据全部返回。
标签:int,数据库,索引,IO,mysql,节点,加载 From: https://www.cnblogs.com/fengok/p/17948072