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

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.mzph.cn/pingmian/52629.shtml

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

相关文章

centOS安装R语言4.0及以上

centOS安装R语言4.0及以上 源码编译安装R安装配置必要的依赖库安装配置必要图片库检测配置R问题1:R语言安装依赖,缺啥补啥问题2:依赖 curl7 and curl >7.28 检查配置,如果没问题,进行编译安装安装Rstudio-server参考…

【Kubernetes】k8s集群之HPA

目录 一、HPA 概述 二、部署 metrics-server 三、部署 HPA 四、总结 一、HPA 概述 HPA(Horizontal Pod Autoscaling)Pod 水平自动伸缩,Kubernetes 有一个 HPA 的资源,HPA 可 以根据 CPU 利用率自动伸缩一个 Replication Con…

C# 实现傅里叶变化(DFT)

1、DFT函数类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace DFT_FFTApp.Utils {public class DFT{/// <summary>/// DFT/// </summary>/// <param name"data"&g…

Systemc example based on VCS

README VCS example path: $VCS_HOME/doc/examples/systemc/ SYSTEMC_HOME: module load systemc(or 自己download systemc, VCS_HOME下应该也有&#xff1a;$VCS_HOME/include/systemc233/tlm_utils) gcc需要是7.3.0版本&#xff0c;module load gcc/7.3.0 注意事项 vcs …

C语言典型例题55

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目&#xff1a; 例题4.7 兔子的繁殖。这是一个有趣的古典问题&#xff1a;有一对兔子&#xff0c;从出生后的第3个月开始起每个月都生一对兔子。小兔子长到第3个月又生一对兔子。假设所有兔子都不死&#xff0c;…

二叉搜索树进阶之红黑树

前言&#xff1a; 在上文我们已经学习了AVL树的相关知识以及涉及的四种旋转的内容&#xff0c;但是AVL树追求平衡导致旋转操作过多&#xff0c;一些情况下影响性能&#xff0c;由此我们就来了解一下二叉搜索树的另外一个分支&#xff0c;红黑树。 &#xff08;倘若对旋转知识…

2024版Assimp配置教程

最近想看看图形学&#xff0c;选择速通LearnOpenGL&#xff0c;不出意外最耗时间的依然是配置环境。按照教程上的把GLFW等等配置的没有问题&#xff0c;但是在Assimp这里卡住了。原因是教程上说的不详细&#xff0c;而网上查的又和现在的版本相去甚远&#xff0c;导致捣鼓了好一…

从web.xml动态读取sunspringmvc.xml文件

文章目录 1.问题分析1.SunWebApplicationContext.java 中sunspringmvc.xml是写死的2.但是web.xml已经配置了init-param&#xff0c;所以应该是可以读取的 2.具体实现1.SunDispatcherServlet.java 得到ServletConfig传递给Spring容器完成初始化2.SunWebApplicationContext.java …

Python中的“for循环”:探索其无限潜力

引言 for循环是任何Python程序员工具箱中的必备技能之一。无论是在处理数据时需要遍历数组&#xff0c;还是在编写Web应用时循环处理请求&#xff0c;亦或是进行复杂的算法实现&#xff0c;for循环都能派上大用场。通过掌握for循环的不同用法&#xff0c;我们可以更高效地解决…

【C++从小白到大牛】C++的隐式和显示类型转换基础知识讲解

目录 1、C语言中的类型转换 2、C语言和C中可以相互转换的类型总结 C语言&#xff1a; CPP&#xff1a; 3. 为什么C需要四种类型转换 4、C四大强制类型转换 4.1static_cast 4.2 reinterpret_cast 4.3 const_cast 4.4dynamic_cast 注…

基于x86 平台opencv的图像采集和seetaface6的性别识别功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的性别识别功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的性别识别模块从而实现…

JS将class转换为function

类定义与构造函数 在JavaScript中&#xff0c;类的定义可以通过class关键字来实现&#xff0c;也可以通过传统的构造函数和原型链的方式来实现。上述代码展示了这两种不同的实现方式。 使用class关键字 class Example {constructor(name) {this.name name;}func() {console…

谓词和量词

一、个体词和谓词 命题是一句陈述句&#xff0c;命题由个体词和谓词组成。 个体词是句子中的主语部分&#xff0c;比如这里的王童。 谓词是句子里的剩余部分&#xff0c;比如是一个三好学生 个体词用小写字母表示&#xff0c;谓词用大写字母&#xff0b;&#xff08;&#…

Java核心API——io类缓冲流

在前面的学习中我们学习了如何向文件中简单的传输写入数据 java将流分为两类 节点流与处理流 节点流: 又称为低级流,特点:实际连接程序与另一端的"管道",负责实际读写数据的流. IO一定是建立在某个低级流的基础上进行的. 文件流就是低级流,它们是实际连接程序与…

数据库(专业存储数据)

数组、链表、变量----->内存&#xff1a;程序运行结束&#xff0c;数据丢失 文件-------------->硬盘 数据库&#xff1a;专业存储数据&#xff0c;大量数据----------->硬盘 一、数据库文件与普通文件区别: 1.普通文件对数据管理(增刪改查)效率低 2.数据库对数据…

算法: 双指针

题目&#xff1a;环形链表 题目讲解&#xff1a; 判断环 要判断链表是否有环&#xff0c;可以使用快慢指针的方法。快指针每次走两步&#xff0c;慢指针每次走一步。如果链表有环&#xff0c;快慢指针最终会相遇&#xff1b;如果没有环&#xff0c;快指针会先到达链表末尾。 …

11.舵机控制

jd就是cnt&#xff0c;分别对应着 0.5ms-------------0度&#xff1b; 1 1.0ms------------45度&#xff1b; 2 1.5ms------------90度&#xff1b; 3 2.0ms-----------135度&#xff1b; 4 2.5ms-----------180度&#xff1b; 5 并且软…

【PostgreSQL教程】PostgreSQL 高级篇之索引

博主介绍:✌全网粉丝20W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…

java操作zookeeper

java操作zookeeper 文档 linux安装java -centos安装java -linux配置java环境变量zookeeper单机安装zookeeper集群安装zookeeper客户端命令行操作、节点类型及监听器zookeeper集群写数据原理java操作zookeeper 依赖信息 <dependency><groupId>junit</groupId…

MySQL:简述对事务的认识

浅谈对Spring事务的认识&#xff1a;https://xiaoer.blog.csdn.net/article/details/80849971 一、事务的特性 事务是数据库永恒不变的话题&#xff0c; ACID&#xff1a;原子性&#xff0c;一致性&#xff0c;隔离性&#xff0c;持久性。 &#xff08;1&#xff09;原子性&am…