首页 > 数据库 >MySQL 索引:索引为什么使用 B+树?

MySQL 索引:索引为什么使用 B+树?

时间:2024-03-21 23:04:10浏览次数:36  
标签:为什么 10 路径 叶子 索引 MySQL 平衡 节点

Hash 索引不支持顺序和范围查询;

二叉查找树(BST):解决了排序的问题,极端情况下可能会退化成线性链表,查询效率急剧下降;

平衡二叉树(AVL) :通过旋转解决了平衡的问题,但是旋转操作效率太低;

  AVL 树是严格的平衡二叉树,所有节点的左右子树高度差不能超过 1

红黑树 :通过舍弃严格的平衡和引入红黑节点,解决了 AVL 旋转效率过低的问题,但是在磁盘等场景下,树仍然太高,IO 次数太多;

  红黑树并不追求严格的平衡,而是大致的平衡:

节点是红色或黑色。
根是黑色。
所有叶子都是黑色(叶子是NIL节点)。
每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点(简称黑高)。

红黑树保证最长路径不超过最短路径的二倍,因而近似平衡(最短路径就是全黑节点,最长路径就是一个红节点一个黑节点,当从根节点到叶子节点的路径上黑色节点相同时,最长路径刚好是最短路径的两倍)

B 树 :通过将二叉树改为多路平衡查找树,解决了树过高的问题;


B+树 :B 树中每个节点(包括叶节点和非叶节点)都存储真实的数据,B+树中只有叶子节点存储真实的数据,非叶节点只存储键。因此能存更多记录。B+树的叶节点之间通过双向链表链接,因此更适合范围查询和排序查找。

InnoDB存储引擎中页的大小为16KB,一般表的主键类型为INT(占用4个字节)或BIGINT(占用8个字节),指针类型也一般为4或8个字节,也就是说一个页(B+Tree中的一个节点)中大概存储16KB/(8B+8B)=1K个键值(因为是估值,为方便计算,这里的K取值为〖10〗^3)。

也就是说一个深度为3的B+Tree索引可以维护10^3 * 10^3 * 10^3 = 10亿 条记录。(这种计算方式存在误差,而且没有计算叶子节点,如果计算叶子节点其实是深度为4了)

Mysql索引——B+树是怎么提高查询效率?_b+树的查询效率-CSDN博客 

标签:为什么,10,路径,叶子,索引,MySQL,平衡,节点
From: https://blog.csdn.net/QGhurt/article/details/136922975

相关文章

  • 8、MySql数据库连接
    fromflaskimportFlaskfromflask_sqlalchemyimportSQLAlchemyfromsqlalchemyimporttextapp=Flask(__name__)#主机IP地址HOSTNAME="127.0.0.1"#MySql的监听端口号,默认3306PORT=3306#用户名,密码,自己设置的USERNAME="root"PASSWORD="root&......
  • java毕业设计线上牙科诊所管理推荐系统的设计与实现(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,越来越多的传统行业开始向数字化转型。医疗行业作为人们生活中的重要组成部分,其信息化、智能化的需求日益增长。牙科诊所作为提......
  • java毕业设计逍遥大药房管理系统(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着人们生活水平的提高,对健康的关注也日益增加。药房作为提供药品和健康咨询服务的重要场所,其管理效率和服务质量直接影响到人们的用药安全和健康。然而,......
  • Mysql实操基础(数据库作业)
    附上官网地址MySQL1.登录mysql-uusername-ppassword其中,username为数据库的用户名,password为对应的密码。这条命令将会连接到本地默认的MySQL服务器并使用提供的用户名和密码进行身份验证。如果成功登录,则可以开始与MySQL交互了。然后先创建数据库CREATEDATABASE库......
  • java毕业设计小区宠物管理平台(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着社会的发展和人们生活水平的提高,越来越多的家庭开始饲养宠物。在城市中,小区是宠物活动的主要场所之一。然而,随着宠物数量的增加,小区宠物管理面临着许......
  • java毕业设计校园互助平台(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,人们的生活方式和学习方式都发生了翻天覆地的变化。特别是在校园环境中,学生们面临着各种各样的问题和需求,如学术问题、生活琐事......
  • MySQL下载安装与提供远程连接
    一、windowsmysql安装1、安装到 C:\mysql-8.0.31-winx642、根目录下添加配置文件my.ini[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]port=3306default-time-zone='+08:00'basedir=C:\mysql-8.0.31-winx64datadir=C:\m......
  • MYSQL 同步到ES 如何设计架构保持一致性
    简单使用某个组件很容易,但是一旦要搬到生产上就要考虑各种各样的异常,保证你方案的可靠性,可恢复性就是我们需要思考的问题。今天来聊聊我们部门在MYSQL同步到ES的方案设计。在面对复杂条件查询时,MYSQL往往显得力不从心,一般公司的做法会通过将mysql中的数据同步到ES,之后的查询......
  • Ubuntu 设置mysql 自动备份
    1、创建备份文件以及备份脚本所在的目录在根目录下面设置cd/mkdirbackup2、修改mysql备份配置文件这种相比于在将用户名和密码写在bash脚本里面,会更加安全一些。sudovim/etc/mysql/conf.d/mysqldump.cnfmysqldump.cnf文件添加以下内容:host=127.0.0.1user=****#mysq......
  • mysql的my.cnf解释说明
    这个关乎配置文件,需要了解后,对数据库管理有很大的帮助。#***clientoptions相关选项***##以下选项会被MySQL客户端应用读取。注意只有MySQL附带的客户端应用程序保证可以读取这段内容。如果你想你自己的MySQL应用程序获取这些值。需要在MySQL客户端库初始化的时候指定这些选......