MySQL索引底层数据结构

索引到底是什么

  • 索引是帮助MySQL高效获取数据的 排好序数据结构
  • 索引存储在文件,MySQL使用的数据结构为 B+Tree
    在这里插入图片描述

数据结构教学网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
B-Tree 数据结构:https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653190965&idx=1&sn=53f78fa037386f85531832cd5322d2a0&chksm=8c9909efbbee80f90512f0c36356c31cc74c388c46388dc2317d43c8f8597298f233ca9c29e9&scene=21#wechat_redirect
B+Tree 数据结构:https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653191027&idx=1&sn=4ba22e3ec8bd149f69fc0aba72e4347e&chksm=8c9909a9bbee80bfa1d8497ff0525df130414c1731b5aa5287bf16ea1cf86c8d8e6f20782184&scene=21#wechat_redirect

联合索引结构

在这里插入图片描述

聚集索引和非聚集索引

根本区别

  • 数据的物理存放顺序与索引顺序是否一致

MyISAM和InnoDB的索引

  • MyISAM的B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。主索引和辅助索引没啥区别,只是主索引中的key一定得是唯一的。这里的索引都是非聚集索引。

  • InnoDB的数据文件本身就是索引文件,B+Tree的叶子节点上的data就是数据本身,key为主键,这是聚集索引。非聚集索引,叶子节点上的data是物理地址(所以聚集索引的key,不能过长)。为什么存放的主键,而不是记录所在地址呢,理由相当简单,因为记录所在地址并不能保证一定不会变,但主键可以保证。

  • 至于为什么主键通常建议使用自增id呢?

MyISAM索引文件和数据文件是分离的(非聚集)

主键索引

在这里插入图片描述

普通索引

在这里插入图片描述

InnoDB索引实现(聚集)

主键索引

在这里插入图片描述

普通索引

在这里插入图片描述

  1. 数据文件本身就是按B+Tree组织的一个索引结构文件
  2. 索引-叶子节点包含了完整的数据记录
  3. 为什么InnoDB表必须有主键,并且推荐使用整型的自增主键?
  4. 为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值