三、mysql-万字长文读懂mysql

mysql

  • 三、 Mysql
    • 3.1 基础
      • 3.1.1 mysql执行流程-组成架构
    • 3.2 索引
      • 3.2.1 索引底层的数据结构与算法
        • 分类
        • 在创建表时,InnoDB 存储引擎会根据不同的场景选择不同的列作为索引
        • B+树结构
      • 3.2.2 为什么 MySQL InnoDB 选择 B+tree 作为索引的数据结构
        • 3.2.2.1. 从磁盘角度出发
        • 3.2.2.2. 数据结构
          • `数组和二分查找`
          • `二分查找树`
          • `自平衡二叉树(AVL )`
          • `b树`
          • `B+树`
        • 3.2.2.3 Innodb 里的 B+ 树结构
      • 3.2.3 什么时候适用索引
        • 索引缺点
        • 什么时候适用索引
      • 3.2.4 什么时候不需要创建索引
      • 3.2.5 优化索引方法
      • 3.2.6 索引失效的场景
    • 3.3 事务
    • 3.4锁篇
      • 3.4.1 有哪些锁
      • 全局锁
      • 表级锁
    • 3.5 日志
        • 概念
        • undo log
        • Buffer Pool
        • redo log
        • binlog
        • 为什么需要两阶段提交
    • 3.6 内存

三、 Mysql

3.1 基础

3.1.1 mysql执行流程-组成架构

在这里插入图片描述

  • Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现,主要包括连接器,查询缓存、解析器、预处理器、优化器、执行器等
  • 存储引擎层负责数据的存储和提取。支持 InnoDB、MyISAM、Memory 等多个存储引擎,不同的存储引擎共用一个 Server 层。现在最常用的存储引擎是 InnoDB

执行一条 SQL 查询语句,期间发生了什么?

  • 连接器:建立连接,管理连接、校验用户身份;
  • 查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;
  • 解析 SQL,通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型;
  • 执行 SQL:执行 SQL 共有三个阶段:
  • 预处理阶段:检查表或字段是否存在;将 select * 中的 * 符号扩展为表上的所有列。
  • 优化阶段:基于查询成本的考虑, 选择查询成本最小的执行计划;
  • 执行阶段:根据执行计划执行 SQL 查询语句,从存储引擎读取记录,返回给客户端;
  • 在这里插入图片描述

3.2 索引

3.2.1 索引底层的数据结构与算法

分类
  1. 按「数据结构」分类:B+tree索引、Hash索引、Full-text索引
  2. 按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)
  3. 按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引
  4. 按「字段个数」分类:单列索引、联合索引
在创建表时,InnoDB 存储引擎会根据不同的场景选择不同的列作为索引
  • 如果有主键,默认会使用主键作为聚簇索引的索引键(key);
  • 如果没有主键,就选择第一个不包含 NULL 值的唯一列作为聚簇索引的索引键(key);
  • 在上面两个都没有的情况下,InnoDB 将自动生成一个隐式自增 id 列作为聚簇索引的索引键(key);
    创建的主键索引和二级索引默认使用的是 B+Tree 索引
B+树结构

如下面表格
在这里插入图片描述
那么B+树是如何存储的?
B+树结构:B+Tree 是一种多叉树,叶子节点才存放数据,非叶子节点只存放索引,而且每个节点里的数据是按主键顺序存放的。每一层父节点的索引值都会出现在下层子节点的索引值中,因此在叶子节点中,包括了所有的索引值信息,并且每一个叶子节点都有两个指针,分别指向下一个叶子节点和上一个叶子节点,形成一个双向链表
在这里插入图片描述

通过主键查询的过程
select * from product where id= 5;

  • 这条语句使用了主键索引查询 id 号为 5 的商品。查询过程是这样的,B+Tree 会自顶向下逐层进行查找:
    • 将 5 与根节点的索引数据 (1,10,20) 比较,5 在 1 和 10 之间,所以根据 B+Tree的搜索逻辑,找到第二层的索引数据 (1,4,7)
    • 在第二层的索引数据 (1,4,7)中进行查找,因为 5 在 4 和 7 之间,所以找到第三层的索引数据(4,5,6);
    • 在叶子节点的索引数据(4,5,6)中进行查找,然后我们找到了索引值为 5 的行数据。
      数据库的索引和数据都是存储在硬盘的,我们可以把读取一个节点当作一次磁盘

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

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

相关文章

深度解析移动硬盘“函数不正确”错误及高效恢复策略

在数据密集型的社会中,移动硬盘作为移动存储的重要载体,承载着无数用户的个人信息、工作资料及珍贵回忆。然而,当遭遇“函数不正确”的错误时,这些宝贵的数据仿佛被一层无形的屏障所阻隔,让人束手无策。本文将深入探讨…

如何选择高性价比的土壤检测仪器?

在现代农业与环保领域,土壤检测仪器的选择显得尤为关键。它不仅关系到土壤养分管理、作物健康生长,还涉及到环境保护和可持续发展。那么,面对市场上琳琅满目的土壤检测仪器,我们该如何选择一款实用的设备呢? 首先&…

(1)滑动窗口算法介绍与练习:长度最小的子数组

滑动窗口算法介绍 所谓滑动窗口,即为同向双指针移动过程中形成的间隔区域,并且这两个指针在移动的过程中不会回退 对于滑动窗口的题目可以抽象为三个步骤: 定义窗口两端指针left和right进入窗口判断离开窗口循环2、3和4步 滑动窗口练习 长度最…

昇思训练营打卡第十七天(基于MindNLP+MusicGen生成自己的个性化音乐)

MindNLP是一个基于MindSpore的自然语言处理(NLP)开源库。它提供了一系列常用的NLP方法,并支持解决各种自然语言处理任务的平台。MindNLP的设计目标是帮助研究人员和开发者更高效地构建和训练模型。 MindNLP的主要特点包括: 全面…

git要忽略对文件的本地修改

要忽略对文件的本地修改(即,使Git忽略对该文件的任何未提交更改),可以使用以下命令将该文件标记为假设未更改(assume-unchanged): sh git update-index --assume-unchanged runtime/x64/skin/s…

短视频电商源码的优势及软件架构解析

短视频电商源码是目前电商行业中非常火热的一个新兴领域,它通过短视频内容和电商商品的结合,为用户提供了一种新的购物体验。下面将介绍短视频电商源码的优势以及软件架构。 首先,短视频电商源码具有以下几个优势: 1、创新的购物体…

C#中的函数

函数是越单一越好 函数的命名规范 驼峰命名法&#xff1a;即首字母大写 多单词拼接时&#xff0c;所有单词首字母大写 internal class Program {static void Main(string[] args){int a 2;int b 3;int sum add(a, b);Console.WriteLine(sum); ​}/// <summary>///…

惠海 H6118 DCDC降压恒流芯片IC 30V36v40V降12V 9V LED景观灯舞台灯方案

H6118是一款连续电感电流导通模式的降压型LED恒流驱动器&#xff0c;用于驱动一个或多个LED 灯串。H6118工作电压从4V到30V&#xff0c;提供可调的输出电流&#xff0c;最大输出电流可达到1.2A。 H6118内置功率开关管&#xff0c;采用高端电流检测电路&#xff0c;支持PWM模式…

云联壹云 FinOps:赋能某车企公有云成本管理与精细化运营

背景 某车企&#xff0c;世界 500 强企业&#xff0c;使用了大量的公有云资源&#xff0c;分布于多家公有云&#xff0c;月消费在千万级别。 业务线多且分散&#xff0c;相关的云消耗由一个核心团队进行管理&#xff0c;本次案例的内容将围绕这些云成本的管理展开的。 需求 …

用例导图CMind

突然有一些觉悟&#xff0c;程序猿不能只会吭哧吭哧的低头做事&#xff0c;应该学会怎么去展示自己&#xff0c;怎么去宣传自己&#xff0c;怎么把自己想做的事表述清楚。 于是&#xff0c;这两天一直在整理自己的作品&#xff0c;也为接下来的找工作多做点准备。接下来…

超详细kkFileView打包部署Windows或Liunx

目录 前言 下载源码编辑打包 Windows下的部署 Liunx下的部署 前言 本文章主要以下载源码 自己编译打包的方式进行部署。 因为4.0.0之后官方不在初始jar包,所以自己拉代码吧,别偷懒,顺便看看代码怎么写的。 码云: kkFileView 下载源代码为4.4.0-beta版本,亲测可用 下载源…

C++的map / multimap容器

一、介绍 在C的map / multimap容器中&#xff0c;所有的元素均是pair类型&#xff08;有关pair类型可以参考我之前写的 《C的set / multiset容器》的3.2中有介绍到&#xff09;。 每对pair的第一个元素被称为关键字key&#xff0c;第二个元素被称为值value。因此&#xff0c;ma…

Linux 复现Docker NAT网络

Linux 复现Docker NAT网络 docker 网络的构成分为宿主机docker0网桥和为容器创建的veth 对构成。这个默认网络命名空间就是我们登陆后日常使用的命名空间 使用ifconfig命令查看到的就是默认网络命名空间&#xff0c;docker0就是网桥&#xff0c;容器会把docker0当成路由&…

43、nginx的优化、防盗链、重定向、代理

nginx的优化、防盗链、重定向、代理 一、nginx的优化 1.1、隐藏版本号 server_tokens off;隐藏版本号 [roottest1 conf]# vim nginx.confserver_tokens off;[roottest1 conf]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok ngin…

卫星IoT产品发展前景

卫星IoT产品发展前景 一、概述 卫星IoT产品是指利用卫星通信技术实现物联网设备互联互通的解决方案。随着卫星互联网技术的快速发展&#xff0c;卫星IoT产品正逐渐成为解决偏远地区、海洋、航空等场景下物联网连接问题的重要手段。 二、性能特点 广泛覆盖&#xff1a; 卫星…

【CW32F030CxTx StartKit开发板】利用超声波传感器实现智能灯控

目录 1、超声波传感器 2、硬件连线 3. 程序开发 3.1 超声波测距 3.2 LED控制 4. 演示视频 本文首发于21ic。 感谢21ic和武汉芯源提供的测试机会。 在上一篇帖子中介绍了CW32F030CxTxStartKit 评估板的环境构建。本次介绍如何利用超声波传感器实现人来灯亮&#xff0c;人…

Ubuntu 22.04上/etc/init.d/softIOC脚本解析

如何在Linux上设立一个软IOC框架 以下说明是基于我们的Debian Linux机器。其它发行版(或其他Unixes)会有不同命令和对于东西有不同位置。这对我添加到本页的Debian /etc/init.d尤其如此。如果你为一个不同发行版创建一个不同的脚本&#xff0c;请添加它到本页。其它人将能够使…

基于DPU的云原生计算资源共池管理解决方案

1. 方案背景和挑战 在传统的云环境中&#xff0c;通常存在着不同的技术栈&#xff0c;支撑多样化的计算服务&#xff0c;具体如下&#xff1a; ① OpenStack环境与虚拟化云主机及裸金属服务 OpenStack是一个开源的云计算管理平台项目&#xff0c;它提供了部署和管理大规模计…

深入理解 RTOS 中断处理机制:实战项目与代码解析

中断&#xff0c;如同嵌入式系统的神经反射&#xff0c;实时响应着外部事件&#xff0c;是保证系统实时性和可靠性的关键。在实时操作系统&#xff08;RTOS&#xff09;中&#xff0c;中断处理机制更是重中之重。本文将结合一个具体的项目案例&#xff0c;深入剖析 RTOS 中断处…

LabVIEW高能质子束流密度分布测试系统

LabVIEW平台开发的高能质子束流密度分布测试系统。该系统主要应用于电子器件的抗辐射加固试验&#xff0c;旨在精确测量高能质子束的密度分布&#xff0c;以评估电子器件在辐射环境下的性能表现和耐受能力。 系统组成与设计 硬件组成&#xff1a; 法拉第杯探测器&#xff1a;…