索引底层数据结构(查找)的小结 B树,B+树

索引的本质

在这里插入图片描述

采用Hash精确查找

使用hash可以精确的查找,但是存在问题 select * from t where col>6
对范围查找支持比较差

采用二叉排序树作为索引的缺点

在这里插入图片描述

单边增长时会变得非常长

采用红黑树作为索引的缺点

在这里插入图片描述

当表中的数据非常多时,树的高度越来越大,查找的次数越来越多

B树的结构

借鉴红黑树的思想,对每个节点存储多个索引

在这里插入图片描述

  • 叶子节点没有指针,对范围查找也不支持
  • 同时在非叶子节点存放data,查找效率不一致
  • 在非叶子节点存放dtaa,可能造成每页存放的索引个数有限

B+树结构

在这里插入图片描述

  • 每个节点能存储16kb大小信息,为了存储更多元素将data去除,

MyISAM存储引擎索引实现

在数据库所对应的文件实现有三个文件 分别定义 表的结构 表中的数据 以及表中的索引格式

在这里插入图片描述
MyISAM叶子节点存放的是磁盘文件的地址

InnoDB存储引擎实现B+树索引

在这里插入图片描述
在这里插入图片描述

主键索引/聚集索引

key+data在一起

非聚集索引

要过滤两次,首先找到key所对应的磁盘地址再找到datra

为什么InnoDB表必须有主键,并且推荐使用整型的自增主键

MySQL设计的时候是按照B+树组织的

为什么推荐使用整型的自增主键?

  • 使用整型比较的比较快,使用字符串比较大小需要进行大量的比较,比较性能比较差(不使用UUID)’
  • 使用自增主键(B+树从左到右依次递增)可以减少维护B+树的成本

联合索引

MySqlB+树三行可以存放多少数据

在这里插入图片描述
(1)每页大小为16KB,在每个节点存放一个索引值以及指针,索引值为bigInt时对应8字节,对应的指针为6B,则每页可以存放 16KB/14B = 1170个
(2) 第二乘每个pag也对应1170个
(3)假设叶子节点每行记录key+data占用1kb,则每page可以存放16个行

最终计算结果为: 1170117016 = 1000多万行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值