• B+Tree 索引结构


    1. 数据库索引

    索引是为了提高数据的查询速度,相当于给数据进行编号,在查找数据的时候就可以通过编号快速找到对应的数据。索引用的是 B + Tree 数据结构。

    乱序插入数据,会自动按照 id 进行升序排列,这是因为主键自带索引:

    在这里插入图片描述

    2. B+Tree 索引结构

    数据存储的内部结构类似于链表的形式,通过指针关联不同的数据。第一位是索引,第二位是数据,第三位是后继指针(指向下一个节点)。

    在这里插入图片描述
    毕竟它类似于链表,当数据量很大的时候,这种结构的查询速度还是很慢的,那么 MySQL 是如何解决的呢?

    MySQL 中有一个 page 的概念,相当于给数据进行分页,把一部分数据存入一个 page 中,先查 page 再查数据, 相当于一个分类管理。

    在这里插入图片描述

    每个 page 可以存储 16KB 的数据,这样就相当于给数据建立了上层目录,查找的时候先找大目录,再找具体的数据。
    MYSQL 给 page 也提供了快速查询的目录,这样就可以清晰地知道你要查询的数据是在第几页,然后直接去第几页找就可以了。

    多一层目录可提高数据查询的效率!

    把每个 page 中的第一条数据的索引和后继指针取出来,放到 page 目录里面。 1P 第一页,3P 第二页,5P 第三页。
    查询数据的时候,会先找到它的 page,而这个 page 到底是多少,要看 id 在哪个区间内,比如 id = 4 的数据就在第二页(因为 3 < id < 5)。找到 page 之后,再进入 page 中查找具体的数据。

    在这里插入图片描述

    这个目录也是有容量的,所以我们还会开启第二个、第 N 个 page 目录。一个 page 目录中也可以存储 16KB 的数据,如果是海量数据,page 目录也会有很多,这样查询起来也是比较慢的。
    为了提高查询效率,MYSQL 就给 page 目录再加了一层目录。

    同样的方法,依然是取出各 page 目录里面的第一项(索引和指针),存入更上层的目录中。

    在这里插入图片描述

    一般来说三层目录就足够了,要查找一个数据的时候,就从最上面一层一层分级查找,而这种结构就叫做 B+Tree!

    假设一条记录的空间为 32 个 byte,那么最底层一个单元可以存储的数据为 16 * 1024 / 32 = 512 条;
    第二层只需记录 id 和 p,假设是 6 个 byte,则一个单元可以保存的数据是 16 * 1024 / 6 = 2730 条;
    第三层每个单元存储的数据和第二层一样是 2730 条。
    所以总共可以存储的数据条数为三层数据相乘:512 * 2730 * 2730 = 38亿。

  • 相关阅读:
    关于HTTP/1.1,HTTP/2和HTTP/3的区别与联系
    VLAN 数据帧的处理
    C语言:用函数指针实现加减乘除的应用
    MySQL 一键安装 (支持8.0.16-8.0.30)
    数据分享|函数型数据分析部分省市新冠疫情数据
    网络安全(黑客)自学
    [附源码]计算机毕业设计线上评分分享平台Springboot程序
    xcode开发ios应用简介
    软件测试|Python自动化测试实现的思路
    基于stm32的shell实现
  • 原文地址:https://blog.csdn.net/m0_52861684/article/details/132836899