书库技术与未来MySQL索引是怎么推导出来的
书籍封面

MySQL索引是怎么推导出来的

作者 小孩子
15.0 分钟

摘要

MySQL索引是怎么推导出来的

  • 本文介绍了MySQL索引的底层原理,通过了解索引的推导过程,可以帮助读者更深入地理解MySQL的运行机制。
  • 你能获得:彻底理解MySQL索引的诞生过程,掌握在单个页面和多个页面中快速定位记录的方法。

核心内容:

1. 字符集和比较规则

  • MySQL支持多种字符集,字符集决定了字符的表示方式,比较规则决定了字符之间的大小关系。

详细解释:字符集用于将人类可读的字符转换为计算机可理解的二进制字节序列。比较规则则定义了字符间的排序和比较方式,例如是否区分大小写。

2. 记录的存储方式

  • 记录以单向链表的形式存储,通过next_record指针连接,主键值从小到大排序。

详细解释:每条记录包含用户数据和额外信息。next_record指针用于连接记录,形成一个有序的单向链表。

3. 数据页与页目录

  • 记录存储在数据页中,InnoDB以页为单位加载数据。页目录通过将记录分组,实现对页内记录的二分查找。

详细解释:页目录将单向链表中的记录分成若干组,每个组通过指针数组进行索引,页目录本质上是一个指针数组,指针指向的记录是有序的。通过二分查找确定记录所在的组,然后遍历该组内的记录。

4. 多页连接与目录项记录

  • 多个数据页通过双向链表连接,目录项记录提取每个页的最小主键值和页号,形成新的目录,用于快速定位记录所在的页。

详细解释:目录项记录包含页的最小主键值和页号。通过目录项记录,可以构建多层目录结构,快速定位目标记录所在的页。

5. B+树索引

  • 通过多层目录项记录,形成B+树索引结构,叶子节点存储用户记录,非叶子节点存储目录项记录,实现快速查找。
    • B+树分为不同的层级,最下层为用户记录,上层为目录项记录,通过逐层查找,快速定位目标记录。
    • 聚簇索引的叶子节点存储完整的用户记录,二级索引的叶子节点存储索引列的值和对应的主键值。

详细解释: B+树是一种平衡树,它能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+树的叶子节点存储实际的数据,而非叶子节点存储索引,这样的结构使得查询效率更高。

6. 聚簇索引与二级索引

  • 聚簇索引按照主键进行排序,叶子节点存放完整的用户记录,二级索引按照指定的列或列组合进行排序,叶子节点存放索引列的值和对应的主键值。

详细解释: 聚簇索引决定了数据在磁盘上的物理存储顺序,而二级索引则提供了根据其他列进行查找的途径。

问答

Q: 什么是页目录?

A: 页目录是将单向链表中的记录分成若干个组,然后使用指针数组对这些组进行索引的数据结构,通过二分查找可以快速定位到记录所在的组。

Q: 什么是目录项记录?

A: 目录项记录包含页的最小主键值和页号,用于在多个页面中快速定位目标记录所在的页。

Q: B+树的叶子节点和非叶子节点有什么区别?

A: 叶子节点存储用户记录,非叶子节点存储目录项记录,用于索引叶子节点,加快查找速度。

思维导图

目标读者

本系列文章适合MySQL数据库使用者、开发者,以及需要进行MySQL面试的求职者。尤其适合那些阅读过《MySQL是怎样运行的》书籍,但对其中细节感到困惑,希望抓住主线,理清脉络的读者。通过学习本系列文章,读者可以更深入地理解MySQL的底层原理,掌握查询优化技巧,并在工作和面试中更加得心应手。

作者背景

小孩子,本系列文章作者,创作了《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》书籍,以及掘金小册《计算机是怎样运行的:从根儿上理解计算机》。

历史背景

《MySQL是怎样运行的》于2020年11月1日发行至今近一年的时间,已经印刷近两万册。但部分读者反映,书中的细节过多,难以抓住主线。本文尝试以最简单的脉络来帮各位理出一条线,大家有了这条线作为主心骨,就不用怕淹没在细节的海洋中无法自拔了。

章节摘要

音频

Comming Soon...