MYSQL:简述对B树和B+树的认识

news2024/12/26 22:29:20

MySQL的索引使用B+树结构。

1、B树

在说B+树之前,先说说B树,B树是一个多路平衡查找树,相较于普通的二叉树,不会发生极度不平衡的状况,同时也是多路的。

B树的特点是:他会将数据也保存在非叶子节点。而这个特点会导致非页子节点不能存储大量的索引。如下图所示:
在这里插入图片描述

2、B+树

针对B树的特点,B+树做了优化。如下图所示:
在这里插入图片描述
我们看到,B+树将所有的data数据都保存到了叶子节点中,非叶子节点只保存索引和指针。

我们假设一个非叶子节点是16kb,每个索引,即主键是bigint,即8b,指针为8b。那么每页能存储大约1000个索引(16kb/ (8b + 8b))。而一颗3层B+树能够存储多少索引呢?如下图:
在这里插入图片描述
大约能够存储10亿个索引。通常B+树的高度在2-4层,由于MySql在运行时,根节点是常驻内存的,因此每次查找只需要大约2-3次IO。可以说,B+树的设计,就是根据机械磁盘的特性来进行设计的。

综上:
1、MySql 的主键不应该太大,如果使用 UUID 这种,将会浪费 B+ 树的非叶子节点。
2、MySql 的主键最好是自增的,如果使用 UUID 这种,每次插入都会调整 B+树,从而导致页分裂,严重影响性能。
3、如果项目中使用了分库分表,我们通常都会需要一个主键进行 sharding,那怎么办呢?在实现上,我们可以保留自增主键,而逻辑主键用来作为唯一索引即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

样本存储需要注意的事项

在实验室和研究机构中,有一些样本是非常重要且需要特殊保护的,这些样本可能包括珍贵的细胞培养物、生物医学样本、药物试剂等等,为了保证这些样本的质量和完整性,采取一些特殊的措施来进行存储管理非常重要。 一旦这些珍贵样本出…

Undertow 性能、配置

一、性能对比 Tomcat vs Jetty vs Undertow性能对比,详细文章: Tomcat vs Jetty vs Undertow性能对比-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1699803压测指标的结果: 吞吐量:Undertow > Jetty > Tomcat响应时间&…

World of Warcraft [CLASSIC][80][Shushia] Call to Arms: Alterac Valley

Alterac Valley 奥特兰克山谷 明明能拿7000-9000荣誉,白送的大战场,废材太多,看不下去了,动不动就杀女人,丢墓地,最终拿什么3000荣誉,也不知道脑子装啥。 我们55级的时候就能把联盟打的不要不要…

物料类型 UNBW 和 NLAG

业务示例 公司的广告部门负责采购广告业务并承担相应的费用。这些宣传册不应该存储在广告部门;而应该存储在物料仓库中。并且需要基于数量而不是金额进行库存管理。因此这些物料的物料类型为未评估物料(UNBW)。 物料类型 UNBW 物料类型UNBW表示未评估物料。可以通…

第20讲 动画讲解轻松学会STM32的PWM

来源:【STM32】动画讲解轻松学会STM32的PWM_哔哩哔哩_bilibili 基本概念 周期/频率 计算公式:PWM周期1个高电平用时1个低电平用时 PWM的频率1/周期 如图所示此时周期为1ms,即1s内存在1000组这样的高低电平,PWM的频率为1000hz。…

selenium启动总报错 WebDriverManager总是异常

我的环境用这个自动管理驱动的工具 WebDriverManager 总是报错 尝试过很多方法都没有,只好手动指定浏览器的位置 System.setProperty("webdriver.chrome.driver", "C:\\Users\\27224\\.cache\\selenium\\chromedriver\\win64\\128.0.6613.84\\chrome…

030集—CAD 实现钟表时针动态转动效果——vba代码实现

cad图中显示动图案例如下: 部分代码如下: (按下Esc键可退出) #If VBA7 Then 64位系统声明Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else 32位系统声明Declare Sub Sleep Lib "k…

95.SAP MII功能详解(08)Workbench-Transaction介绍

目录 1.Transaction 2.Properties of transaction 1.Transaction You use transactions to access data from multiple sources and execute processes, which are triggered synchronously or asynchronously.您可以使用事务从多个源访问数据并执行同步或异步触发的流程。…

期权新手交易必看!50ETF期权和沪深300ETF期权分享

今天带你了解期权新手交易必看!50ETF期权和沪深300ETF期权分享。上证 50ETF期权和沪深 300ETF期权是国内ETF期权最早上市的两个品种,也是交易量及活跃度最高的两个品种。 50ETF期权 上证50ETF期权就是在你支付一定额度的权利金后,获得了在未…

构建一个资源控制面板:模拟 CPU 和内存负载

构建一个资源控制面板:模拟 CPU 和内存负载 每个人都会有一段异常艰难的时光。生活的压力,工作的失意,学业的压力,爱的惶惶不可终日,挺过来的,人生就会豁然开朗,挺不过来的、时间也会教你,怎么与…

记一次事务里发普通消息的线上问题排查过程

1 结论 结论先行:事务MQ的使用场景,使用方式一定得正确,稍有不慎,可能就会带来数据不一致问题。 2 问题背景及现象 3 排查过程 3.1 初次分析 发现问题,及时修复,加完锁上线,以为问题修复了&a…

const、inline、nullptr的使用

目录 1.const引用 1.1权限的放大 1.2权限的缩小 2.inline 3.nullptr 1.const引用 可以引用一个const对象,但是必须用const引用。const引用也可以引用普通对象,因为对象的访 问权限在引用过程中可以缩小,但是不能放大。 不需要注意的是…

C#从入门到精通(20)—C#目录类Directory用法总结

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家!人工智能学习网站 前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任…

【硬核】开源的高性能轻量级ORM框架

简介 easy-orm是一款简洁、轻量高效的数据库对象关系映射框架,它的代码编写规范基于SQL语义,学习成本低,可以快速掌握。 下图是与业界mybatis-plus框架相比。 功能mybatis-pluseasy-orm单表CRUD√√多表CRUD√子查询x√多数据源√预编译√…

一文带你深度了解FreeRTOS信号量——二值信号量

本篇文章深度讲述FreeRTOS信号量——二值信号量的知识,希望我的分享对你有所帮助! 关于FreeRTOS信号量的相关介入,大家可以参考一下这篇文章: 一文带你初探FreeRTOS信号量_freertos 二进制信号量-CSDN博客 目录 一、二值信号量简…

25届最近5年自动化考研院校分析

哈尔滨工程大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、初试大纲复试大纲 七、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目介绍 2、指定…

顺序结构就是“千里走单骑”

顺序结构&#xff0c;就是把工作分成若干个步骤&#xff0c;然后让计算机按步骤依次执行。 对于代码而言&#xff0c;顺序结构就是从上到下依次执行每一条语句。 #include<stdio.h>int main(){//The steps of putting an elephant into the fridge.printf("First,…

【Python知识宝库】掌握列表与元组,轻松处理数据集合

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在Python编程中&#xff0c;列表&#xff08;List&#xff09;和元组&#xff08;Tuple&#xff09;是两种非常基础且强大…

Unity实战案例 2D小游戏HappyGlass(游戏管理类脚本)

本案例素材和教程都来自Siki学院&#xff0c;十分感谢教程中的老师 本文仅作学习笔记分享交流&#xff0c;不作任何商业用途 基础效果 游戏管理脚本 using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using Uni…

FineBI修改地图配置

前言 在使用FineBI绘制地图时&#xff0c;有时候我们可能发现FineBI中的默认地图模型不是最新的&#xff0c;导致某些地区的区域地图与现实不一致&#xff0c;比如说FineBI的默认地图中深圳地图没有大鹏新区&#xff0c;并且将现在大鹏新区的地方标记为了龙华区&#xff0c;为…