腾讯三面灵魂问题:如何理解MySQL索引底层数据结构

本文详细介绍了MySQL索引的底层数据结构,重点讲解了B+tree的优势及其在数据库中的应用。从索引的概念出发,通过二叉树、二叉查找树和平衡二叉树(AVL树)的介绍,逐步引出B+tree。讨论了B+tree与B树的区别,以及为何在大多数情况下选择B+tree。同时,文章对比了Hash表作为索引的局限性,分析了MyISAM和InnoDB存储引擎的索引实现。最后,探讨了二级索引和联合索引的工作原理,以及为何非主键索引采用回表策略。
摘要由CSDN通过智能技术生成

MySQL 索引相关的数据结构有两种,一种是 B+tree,一种是 Hash,那么为什么在 99.99% 很多情况下都使用的是 B+tree索引呢?

索引的底层数据结构是怎样的呢?

接下来就听小二娓娓道来。

一、索引是什么

MySQL 官方对索引的定义:索引是帮助 MySQL 高效获取数据的排好序数据结构。所以,可以得出:索引是数据结构

当然啦,上面两句话可能看起来很抽象,那么生活中有哪些索引的例子呢。

小二以上图《书籍》这本为例,书籍的目录就是按顺序排列的,有第一章,第二章...,这就是一种排好序的数据结构。

目录可以快速帮助我们通过页数快速定位到我们想看的章节,比如我们想看《书籍》第三章,翻到第55页...

小孩子不能看《书籍》哈,不然就会像小二一样流鼻血,哈哈哈。

那比如复杂一点,想要去图书馆找《书籍》这本书的时候。

图书馆往往会给书籍分类存放,索引是由一个个节点组成,根节点(图书馆)有中间节点(每个楼层的类别),中间节点下面又由子节点(每楼的每一排的类别),最后一层是叶子节点(具体书籍)。

可以看到,索引其实就是一棵倒挂着的树,是一种数据结构

小二同时附上一个可视化数据结构网站,有了它学习数据结构简单明了。

可视化数据结构网站:
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

国外的网站访问略慢,当然你好不容易进去了问小二为啥不是中文,那当然是因为小二点了一下翻译啦。

二、二叉树系列

接下来简单说一说和 B+tree 相关的二叉树系列:二叉树、二叉查找树和平衡二叉树

1. 二叉树

什么是二叉树嘞?

每个节点至多只有二棵子树,左子树和右子树,次序不能颠倒。逻辑上二叉树有五种基本形态:空二叉树、只有一个根结点的二叉树、只有左子树、只有右子树、完全二叉树(特例为满二叉树)。遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次,有前序、中序、后序遍历。

不过,小二不会大篇幅讲二叉树的各种形态,遍历...,这篇的主角可是 B+tree。

当然啦,这个时候就有客官要跳出来了,小二明明就是不精通数据结构,还说得这么好听。

哈哈哈,看破不说破嘛,当然也有这方面的原因,大学学习的数据结构全部还给可爱的老师啦。

等小二拜读完《数据结构与算法之美》再出一期数据结构专题,现在就随便看看画的两个图讲究一下吧,结构还是比较简单的。

由于数据库索引是要求排好序数据结构,所以二叉树是不满足使用场景的,那么为了解决排好序这个问题,那么就引出了二叉查找树。

2. 二叉查找树

什么是二叉查找树嘞?

二叉查找树又名二叉搜索树,在满足二叉树的条件下,左子树的节点值总是小于根的节点值,右子树的节点值总是大于根的节点值,也就是左子树节点值 < 根的节点值 < 右子树节点值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值