Mysql索引的数据结构

索引是mysql为了更高效获取数据排好序的数据结构。

索引的数据结构
二叉树
红黑树
hash表
b-树

在这里插入图片描述

b-树
叶节点具有相同的深度,叶子节点的指针为空
所有索引元素不重复
节点中的索引从左到右依次递增

在这里插入图片描述

b+树(b-树的变种)
非叶子节点不存储数据,只存储索引冗余,可以放更多的索引
叶子节点包含所有索引字段
叶子节点用指针连接提高空间访问的性能
在这里插入图片描述

hash
对索引的key进行一次hash计算就可以定位出数据存储的位置
很多时候hash比b+树 索引更高效
仅能满足 = in,不支持范围查找
hash冲突
在这里插入图片描述

MyISAM索引文件和数据文件是分离的(非聚集)
在本地文件中,有两个文件,一个是索引文件,索引文件存储的是索引和对应数据的指针,如果匹配到了,再根据指针去另外一个数据文件中取数据
在这里插入图片描述

InnoDB索引实现(聚集)
表数据文件本身就是按照b+树组织的一个索引文件
聚集索引叶子节点包含了完整的数据记录

为什么建议InnoDB表必须用建主键,并且推荐使用自增主键?
因为主键唯一能更好的生成索引,使用自增主键是为了在生成索引的时候能对其他节点的影响降到最小

为什么非主键索引结构叶子节点存储的是主键(一致性/节省存储空间)
一致性:当数据库做DML的时候索引指向的地址会发生变更,因为非主键索引指向的是主键,所以非主键索引无需做变更
节省存储空间:数据只用存一份就行了,不用建一个索引存储一份数据

在这里插入图片描述
在这里插入图片描述
联合索引的底层存储结构
在这里插入图片描述
按照第一列排序如果第一列重复则按照第二列排序,如果第二列重复则按照第三列排序,
推荐使用,ab,abc 这种索引 因为a,c 或者 b,c依然会触发全表扫描

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值