首页 > 社交 > 科普中国

面渣逆袭:MySQL六十六问,两万字+五十图详解!有点六

常驻编辑 科普中国 2022-06-22 字段   路由   详解   索引   事务   版本   操作   数据库   引擎   数据   日志

34.那一棵B+树能存储多少条数据呢?

70s拜客生活常识网

B+树存储数据条数70s拜客生活常识网

假设索引字段是 bigint 类型,长度为 8 字节。指针大小在 InnoDB 源码中设置为 6 字节,这样一共 14 字节。非叶子节点(一页)可以存储 16384/14=1170 个这样的 单元(键值+指针),代表有 1170 个指针。70s拜客生活常识网

树深度为 2 的时候,有 1170^2 个叶子节点,可以存储的数据为 1170*1170*16=2190240070s拜客生活常识网

在查找数据时一次页的查找代表一次 IO,也就是说,一张 2000 万左右的表,查询数据最多需要访问 3 次磁盘。70s拜客生活常识网

所以在 InnoDB 中 B+ 树深度一般为 1-3 层,它就能满足千万级的数据存储。70s拜客生活常识网

35.为什么要用 B+ 树,而不用普通二叉树?

可以从几个维度去看这个问题,查询是否够快,效率是否稳定,存储数据多少,以及查找磁盘次数。70s拜客生活常识网

为什么不用普通二叉树?70s拜客生活常识网

普通二叉树存在退化的情况,如果它退化成链表,相当于全表扫描。平衡二叉树相比于二叉查找树来说,查找效率更稳定,总体的查找速度也更快。70s拜客生活常识网

为什么不用平衡二叉树呢?70s拜客生活常识网

读取数据的时候,是从磁盘读到内存。如果树这种数据结构作为索引,那每查找一次数据就需要从磁盘中读取一个节点,也就是一个磁盘块,但是平衡二叉树可是每个节点只存储一个键值和数据的,如果是 B+ 树,可以存储更多的节点数据,树的高度也会降低,因此读取磁盘的次数就降下来啦,查询效率就快。70s拜客生活常识网

36.为什么用 B+ 树而不用 B 树呢?

B+相比较B树,有这些优势:70s拜客生活常识网

  • 它是 B Tree 的变种,B Tree 能解决的问题,它都能解决。B Tree 解决的两大问题:每个节点存储更多关键字;路数更多
  • 扫库、扫表能力更强如果我们要对表进行全表扫描,只需要遍历叶子节点就可以 了,不需要遍历整棵 B+Tree 拿到所有的数据。
  • B+Tree 的磁盘读写能力相对于 B Tree 来说更强,IO次数更少根节点和枝节点不保存数据区, 所以一个节点可以保存更多的关键字,一次磁盘加载的关键字更多,IO次数更少。
  • 排序能力更强因为叶子节点上有下一个数据区的指针,数据形成了链表。
  • 效率更加稳定B+Tree 永远是在叶子节点拿到数据,所以 IO 次数是稳定的。

37.Hash 索引和 B+ 树索引区别是什么?

  • B+ 树可以进行范围查询,Hash 索引不能。

相关阅读:

  • 字段类型有哪些(字段长度怎么设置)
  • 技术人必备的接口测试神器:apifox、apipost、yapi,实用
  • 我做开发测试犯的错
  • 基于SpringBoot微服务开发中的异常处理最佳实践
  • MySQL专题1:
  • 你今天玩游戏了吗?游戏道具了解下
  • 什么是CSRF
  • 最全SQL
  • 云原生(十四)
  • MySQL索引原理篇:深入数据库底层揭开索引机制的神秘面
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。