mysql索引底层原理剖析

mysql 引擎

MyISAM 引擎和 InnoDb引擎

用表对比:

引擎主外键事务缓存索引数据结构关注点表空间
MyISAM××表锁只缓存索引B+Tree 非聚集性能
InnoDb行锁缓存索引和数据,对内存要求较高B+Tree 聚集性事务

什么是索引

索引:通过某种算法高效获取数据的一种数据结构。

数据结构

B-Tree 、B+Tree、B*Tree、红黑树
(重点说B-Tree和B+Tree),红黑树(底层是平衡二叉搜索树)

B-Tree 也叫B 树。B+Tree也叫B+树。

什么是B树

B树是多叉平衡查找树,可以联想到红黑树的二叉查找树。数据量大的时候,B树可保证查询效率,因为不会像二叉结构层次深。

记住几个专业术语: 根节点、叶子节点、关键字、阶、关键字个数、指针。

  1. 关键字个数: [ceil(m/2)-1] <= n <= m-1 (假设B树为m阶)

B树结构图

B树结构图

什么是B+树

B树的变形。

B+树的图

在这里插入图片描述

两者有什么不同之处

B树:

  1. 叶子节点不包含关键字信息 叶子节点没有指向孩子节点的指针

B+树:

  1. 所有叶子节点包含全部关键字信息,及指向含有这些关键字记录的指针,且叶子节点中关键字进行有序链接
  2. 非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
  3. B树是非聚集索引,索引和数据分开存储。
  4. B+树聚集索引,索引和数据存在一起。

mysql索引为什么用B+树

  • 查询效率高
    为什么效率高,因为B+树遍历叶子节点就能遍历整棵树,基于范围查询。
    B树提升了IO性能,却没解决循环遍历元素效率低的问题。
  • 磁盘读写代价低
    为什么?因为B+树内部节点没有指向关键字的指针,内部节点相对B数更小。

了解了mysql 索引底层有什么用

  1. 尽量设置主键自增
    • 为什么?
      因为如果设置非规律性索引,底层是B+树,会导致为了维护树的特性不断分裂,十分低效。
  2. 主键字段不应过长,因为辅助索引引用主索引,主键过长导致辅助索引过长。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值