图解 MySQL 索引,清晰易懂,写得太好了!

什么是索引?

索引是辅助存储引擎高效获取数据的一种数据结构。

很多人形象的说索引就是数据的目录,便于存储引擎快速的定位数据。

索引的分类

我们经常从以下几个方面对索引进行分类

从 「数据结构的角度」 对索引进行分类

  • B+tree
  • Hash
  • Full-texts 索引

从 「物理存储的角度」 对索引进行分类

  • 聚簇索引
  • 二级索引(辅助索引)

从 「索引字段特性角度」 分类

  • 主键索引
  • 唯一索引
  • 普通索引
  • 前缀索引

从 「组成索引的字段个数角度」 分类

  • 单列索引
  • 联合索引(复合索引)

数据结构角度看索引

下表是 MySQL 常见的存储引擎 InnoDB,MyISAM 和 Memory 分别支持的索引类型

在实际使用中,InnoDB 作为 MySQL 建表时默认的存储引擎

对上表进行横向查看可以了解到,B+tree 是 MySQL 中被存储引擎采用最多的索引类型。

这里浅尝辄止的谈一下 B+tree 与 Hash 和红黑树的区别。另外,MySQL 系列面试题和答案全部整理好了,微信搜索​Java技术栈,在后台发送:面试,​可以在线阅读。

B+tree 和 B-tree

B+tree 是 B-Tree 的一个变种。(哦,对了,B-tree 念 B 树,它不叫 B 减树。。。)

B+tree 只在叶子节点存储数据,而 B-tree 非叶子节点也存储数据,对此处有疑问的可以到下面的连接自己插入数据测试一番。

  • B-tree :
  • B+tree :

因此,B+tree 单个节点的数量更小,在相同的磁盘 IO 下能查询更多的节点。

另外 B+tree 叶子节点采用单链表链接适合 MySQL 中常见的基于范围的顺序检索场景,而 B-tree 无法做到这一点。

B+tree 和红黑树

对于有 N 个叶子节点的 B+tree,搜索复杂度为 「O(logdN) ,d 是指 degree 是指 B+tree 的度」,表示节点允许的最大子节点个数为 d 个,在实际的运用中 d 值是大于 100 的,即使数据达到千万级别时候 B+tree 的高度依然维持在 3-4 左右,保证了 3-4 次磁盘 I/O 就能查到目标数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值