MySQL索引的数据结构

一 、为什么mysql索引的数据结构没有选中排序二叉树,红黑树,hash?

1.当数据单边增长的时候排序二叉树树就会退化成链表
在这里插入图片描述
2.数据量大时,树的高度过高

在这里插入图片描述
3. hash满足不了范围查找
select * from ? where ?<100

二 B+tree

B+tree是Btree的一个变种
与Btree不同的是
1.非叶子节点不存储data,只存存储key(即为Mysql的索引字段)
2.叶子节点直接用双向指针连接,这使得范围查找变得高效

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

Mysql设置B+tree所有节点的存储空间为16KB
索引字段为8字节,指针为6字节,那么根节点大概能存贮1170对字段+指针,也就是1170个子节点,每个子节的存储空间为16对,假设一个索引元素(Key+data)为1KB,那么根节点的每个孙子节点能存16个索引元素。
那么一个B+tree总共能存储1170X1170X16,大约两千多万个索引元素
如果有索引存在,Mysql在查询操作时,首先将存储索引的B+tree load进内存中,通过二分查找快速的找到索引

三 InnoDB索引实现

1.表数据文件本身就是B+tree结构
2.聚集索引:叶子点包含了完成的表数据 (补充:非聚集索引:叶子节点存储了表数据地址)
3.InnoDB表必有主键,如果建表时不指定主键,mysql会自动选择一列作为主键,如果没有不重复的列,mysql会建一个隐藏列作为主键
4.联合索引:即key存储多个索引字段。
在这里插入图片描述

 (1) 最左前缀原则:联合索引必须从最左边的索引开始且不跳过索引列,因为检索时候是按索引的顺序依次检索的

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值