MySQL索引底层原理

MySQL 专栏收录该内容
16 篇文章 0 订阅

Mysql索引底层数据结构选型

1、哈希表(Hash)

通过Hash算法,能快速检索数据

数据碰撞问题用链地址法

无法进行范围搜索

2、二叉查找树(BST)

解决哈希索引无法范围搜索的问题

极端情况下会退化成线性链表,自增主键必然会导致极端情况

3、红黑树

会自动调整树形态,使其保持平衡,调整会消耗性能

无法完全解决二叉查找树的问题

4、AVL树

绝对平衡的二叉树,更耗性能

根本解决了红黑数的问题

由于一个节点只存储一个数据,在磁盘IO上消耗过多时间

5、B树

由于从磁盘读取1B数据和1KB数据的时间基本一致

因此可以在一个节点上存储多个数据,这就是B树

即便如何,每个节点上存储的数据还是有限的

6、B+树

B树节点上存储的是数据,每个节点存不了很多数据

B+树节点上存储的是索引,叶子节点上存所有的数据

相对B树,B+树的高度降低了,减少了磁盘IO

 

Mysql的索引用的就是B+树

Innodb引擎和MyISAM引擎的实现

MyISAMInnodb
不支持事务支持事务
表锁行级锁

数据和索引分开

(非聚集索引)

数据和索引放一起

(聚集索引)

索引树的叶子节点存储数据的物理地址

只在主键索引树的叶子节点存储具体数据,其他索引树的叶子节点存储主键。

当使用其他索引时,先在其他索引树中找到主键,再去主键索引树中找到具体数据。这样做是为了节省空间,避免每个索引树都保存数据(聚集索引),所以性能比MyISAM差点

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值