小林coding——图解MySQL

news2024/12/29 10:01:28

文章目录

  • 基础篇
    • 执行一条select语句,期间发生了什么?
    • MySQL一行记录是怎么存储的?
  • 索引篇
    • 索引常见面试题
      • 什么是索引?
      • 索引的分类?
      • 小结
    • 从数据页的角度看B+树
    • 为什么MySQL采用B+树作为索引?
    • MySQL单表不要超过2000W行,靠谱吗?
  • 事务篇
  • 锁篇
  • 内存篇

参考文档

基础篇

执行一条select语句,期间发生了什么?

# 输出这条SQL语句的执行计划,然后key表示执行过程中使用了哪个索引
explain select * from order where id =1;

在这里插入图片描述

在这里插入图片描述

  1. 连接器:建立连接、管理连接、校验用户身份。
  2. 查询缓存:如果查询到缓存则直接返回,否则继续执行。MySQL8.0已删除模块。
  3. 解析SQL:词法分析、语法分析、构建语法树,方便后续读取表名、字段、语句类型。
  4. 执行SQL
    - 预处理阶段:检查表或字段是否存在;
    - 优化阶段:基于查询成本的考虑,选择成本最小的查询执行计划;
    - 执行阶段:执行SQL语句,从存储引擎读取记录,返回给客户端;

MySQL一行记录是怎么存储的?

数据库文件位置:C:\ProgramData\MySQL\MySQL Server 8.0\Data

表空间:段、区、页、行。
InnoDB的数据是按照[页]为单位来读写的。每个页默认为16kb。
在这里插入图片描述
在这里插入图片描述
记录的额外信息
3个部分:变长字段长度列表、NULL值列表、记录头信息。
在这里插入图片描述
记录的真实数据:
定义的真实字段,还有三个隐藏字段,分别是row_id、trx_id、roll_pointer。
在这里插入图片描述

MySQL的NULL值是怎么存放的?
NULL值并不会储存在行格式中的真实数据部分。
NULL值列表会占用1个字节空间。

MySQL怎么知道varchar(n)实际占用数据的大小?
会用变长字段长度列表,存储变长字段实际占用的数据大小。

varchar(n)中的n最大取值多少?
一行记录最大能存储65535字节的数据,但是这个包含了变长字段和NULL值占用的字节。

行溢出后,MySQL是怎么处理的?
InnoDB存储疫情会自动将溢出的数据存放到[溢出页]中。

索引篇

索引常见面试题

什么是索引?

书的目录,就充当索引的角色。
索引 是数据的目录。
在这里插入图片描述

索引的分类?

在这里插入图片描述

小结

InnoDB是在MySQL5.5之后默认的存储引擎,B+Tree索引类型也是MySQL存储引擎采用最多的索引类型。

B+Tree 相比于 B 树和二叉树来说,最大的优势在于查询效率很高,因为即使在数据量很大的情况,查询一个数据的磁盘 I/O 依然维持在 3-4次。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

从数据页的角度看B+树

InnoDB的数据是按数据页为单位来读写的,默认数据页大小是16KB
每个数据页面之间通过双向链表的形式组织起来,物理上不连续,但是逻辑上连续。

数据页内包含用户记录,每个记录之间用单向链表的方式组织起来,为了加快在数据页内高效查询记录,设计了一个页目录,页目录存储各个槽(分组),且主键值是有序的,于是可以通过二分查找法的方式进行检索从而提高效率。

为了高效查询记录所在的数据页,InnoDB 采用== b+ 树作为索引,每个节点都是一个数据页==。

在使用二级索引进行查找数据时,如果查询的数据能在二级索引找到,那么就是索引覆盖操作,如果查询的数据不在二级索引里,就需要先在二级索引找到主键值,需要去聚簇索引中获得数据行,这个过程就叫作回表

为什么MySQL采用B+树作为索引?

磁盘读写的最小单位是扇区,扇区的大小只有== 512B== 大小,操作系统一次会读写多个扇区,所以操作系统的最小读写单位是块(Block)
Linux 中的块大小为 4KB,也就是一次磁盘 I/O 操作会直接读写 8 个扇区
在这里插入图片描述

MySQL单表不要超过2000W行,靠谱吗?

在这里插入图片描述

事务篇

事务是在MySQL引擎层实现的,我们常见的InnoDB引擎是支持事务的,事务的四大特性是原子性、一致性、隔离性、持久性,我们这次主要讲的是隔离性。

当多个事务并发执行的时候,会引发脏读、不可重复读、幻读 这些问题。为了避免这些问题,SQL提出了四种隔离级别,分别是读未提交、可重复度、串行化,从左往右隔离级别顺序递增,隔离级别越高,一位置性能越差,InnoDB引擎的默认隔离级别是可重复读
在这里插入图片描述

锁篇

内存篇

Innodb存储引擎设计了一个缓冲池Buffer Pool,来提高数据库读写性能。
Buffer Pool以页未单位缓冲数据,可以通过innodb_buffer_pool_size参数调整缓冲池的大小,默认是128M。
在这里插入图片描述

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

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

相关文章

ElasticSearch分片与Lucene Index

在ES中一个索引有一个或者多个分片构成,在创建索引的时候可以设置主分片和副本分片的数量,当主分片确定之后就不可以再修改了(因为路由需要基于这个数量来分发请求),而副本分片数量随时可以修改 PUT /myIndex {"settings" : {&quo…

使用ensp软件模拟DNS服务器实验

DNS服务器介绍: DNS服务器(Domain Name Server,域名服务器)是进行域名和与之相对应的IP地址进行转换的服务器。它起到将人类易于记忆的域名映射到相应的机器可识别的IP地址的作用。 DNS服务器中保存了一张域名和与之相对应的IP地…

Flutter 中 Provider 基本使用

前言&#xff1a; Provider.of<XXX>(context).数据 Provider.of<XXX>(context).方法 ChangeNotifier&#xff1a;这个是真正数据&#xff08;状态&#xff09;存放的地方。我们自己创建的provider 是混入ChangeNotifier 的。 一 安装 在pub.dev 上搜索provider …

2.技巧※(0x3f:从周赛中学算法 2022下)

来自0x3f【从周赛中学算法 - 2022 年周赛题目总结&#xff08;下篇&#xff09;】&#xff1a;https://leetcode.cn/circle/discuss/WR1MJP/ 技巧指一些比较套路的算法&#xff0c;包括双指针、滑动窗口、二分&#xff08;主要指二分答案&#xff09;、前缀和、差分、前后缀分解…

TypeScript由浅到深(下篇)

目录 七、TypeScript泛型编程 泛型实现类型参数化: 泛型接口和泛型类的使用: 泛型约束: 映射类型: TypeScript条件类型&#xff08;Conditional Types&#xff09;: 在条件类型中推断&#xff08;inter&#xff09;: 分发条件类型&#xff08;Distributive Conditional …

【Java基础】day15

day15 一、为什么需要使用多线程&#xff1f; 1、资源利用率提升&#xff0c;程序处理效率提高 2、软件运行效率提升 3、使用线程可以把占据时间长的程序中的任务放到后台去处理 4、充分利用 CPU 资源&#xff0c;多核 CPU 的情况下会更高效 二、Spring Boot 的启动流程&…

搭建个人网站没有公网IP地址可以吗?

搭建网站不一定需要公网IP地址&#xff0c;甚至都不需要云服务器或虚拟主机。可以先在本地个人电脑中搭建一个网站&#xff1b;然后网站需要为公网上的其他访客提供访问&#xff1b;所以&#xff0c;需要内网穿透&#xff0c;映射公网域名进行访问。但是完全没必要&#xff0c;…

一文了解Gralde

&#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某公司实习&#x1f…

python黑马程序员(单例模式工厂模式)笔记

一、单例模式 1、设计模式就是一种编程套路 使用特定的套路得到特定的效果 2、什么时单例设计模式 单例模式就是对一个类&#xff0c;只获取其唯一的类实例对象&#xff0c;持续复用它 节省内存 节省创建对象的开销 非单例模式效果&#xff1a; # 演示单例模式的效果 # 非…

chatgpt相关关键字

听了一堂chatgpt的课程&#xff0c;真假参半&#xff0c;但积累了一些关键词。不知道这些关键字会在什么时候起到作用&#xff0c;先记录下来作为灵感积累 1 自然进化的过程&#xff0c;是人选择工具&#xff0c;也是工具选择人 2 Copliot-自动编程&#xff0c;感觉适用于独立新…

安卓 Windows 通过ts链接获取m3u8视频地址进行视频下载

目录 环境&#xff1a; 解决思路及过程&#xff1a; .TS——> .m3u8 1.利用安卓视频缓存机制合成视频 1.1 找到鲨鱼浏览器目录 1.2 进入Android/data/com.zhijianzhuoyue.sharkbrowser/cashe 缓存目录 1.3 显示隐藏文件 1.4 进入可以看到两个随机生成的视频文件夹&…

傅盛“追风”GPT,猎户星空春天来了?

GPT的横空出世&#xff0c;让冷清已久的商用服务机器人市场&#xff0c;又有了“新故事”。 从技术底层逻辑而言&#xff0c;服务机器人受到这类新技术的影响会更为明显。因为抛开硬件&#xff0c;服务机器人的内核其实就是AI&#xff0c;GPT大模型的出现显然成了现阶段该产业进…

coreldraw2023安装教程及新功能讲解

coreldraw是一款非常好用的设计软件&#xff0c;功能非常强大&#xff0c;它可应用于商标设计、标志制作、模型绘制、插图描画、排版及分色输出等领域&#xff0c;因此受到了不少设计师的青睐&#xff0c; CorelDRAW2023新功能有哪些&#xff1f;CorelDRAW2023最新版本更新怎么…

SpringBoot-核心技术篇

技术掌握导图 六个大标题↓ 配置文件web开发数据访问单元测试指标指控原理解析 配置文件 1.文件类型 1.1、properties 同以前的properties用法 1.2、yaml 1.2.1、简介 YAML是 “YAML Aint Markup Language”&#xff08;YAML不是一种标记语言&#xff09;的递归缩写。在…

JumpServer部署与应用实践

JumpServer部署与介绍 文章目录JumpServer部署与介绍前言堡垒机功能特点主要主件一、在线安装二、环境访问三、堡垒机的应用&#xff08;重点&#xff09;3.1用户与用户组的创建3.2资产管理3.3账号管理3.4权限管理四、应用实践前言 Jumpserver 是一款使用 Python, Django 开发…

Su+ELK实现网络监测(1)——Suricata安装与配置

Suricata安装配置文档一、环境准备1. 基础环境安装2. 安装基础组件二、Luajit部署1. LuaJIT的安装2. 需要更新动态库三、suricata部署1. 安装相关依赖2. 下载、编译并安装suricata3. 执行4. 安装其他组件5. 修改配置文件6. 启动测试7. 安装suricata-update8. 更新规则集9. 启动…

Java多线程:线程组

线程组 可以把线程归属到某一个线程组中&#xff0c;线程组中可以有线程对象&#xff0c;也可以有线程组&#xff0c;组中还可以有线程&#xff0c;这样的组织结构有点类似于树的形式&#xff0c;如图所示&#xff1a; 线程组的作用是&#xff1a;可以批量管理线程或线程组对象…

从4k到42k,软件测试工程师的涨薪史,给我看哭了

清明节一过&#xff0c;盲猜大家已经无心上班&#xff0c;在数着日子准备过五一&#xff0c;但一想到银行卡里的余额……瞬间心情就不美丽了。 最近&#xff0c;2023年高校毕业生就业调查显示&#xff0c;本科毕业月平均起薪为5825元。调查一出&#xff0c;便有很多同学表示自己…

命令行打jar包

命令行打jar包前言jar --helpcvfmMANIFEST.MF压入class文件前言 每一个java开发者运行第一个java项目时都知道项目通常被打成jar包&#xff0c;这些jar包是由IDE工具打的&#xff0c;知其然不知其所以然。 jar --help 用help命令打印jar支持的所有参数&#xff0c;不做过多解…

【GPT开发】人人都能用ChatGPT4.0做Avatar虚拟人直播

0 前言 最近朋友圈以及身边很多朋友都在研究GPT开发&#xff0c;做了各种各样的小工具小Demo&#xff0c;AI工具用起来是真的香&#xff01;在他们的影响下&#xff0c;我也继续捣鼓GPT Demo&#xff0c;希望更多的开发者加入一起多多交流。 上一篇结合即时通 IM SDK捣鼓了一个…