MySQL 基础篇 1.1 执行一条SQL语句会发生什么

news2024/11/21 1:46:14

1. MySQL架构一共分为两层 server 和 存储引擎层(一般为Innodb引擎)

     主要执行流程都在server层:连接器,查询缓存,解析SQL(解析器),执行SQL(预处理器,优化器,执行器)

    存储引擎层:索引数据结构由引擎层实现,Innodb引擎支持的是B+树索引。数据表中创建的主键索引和二级索引都由B+树实现。

     执行一条SQL语句会发生什么

1. 连接器:  与客户端进行TCP三次连接(长连接)

                    校验用户名和密码

                    用户名验证通过后,会基于此时读取到的用户权限来进行逻辑判断

       TCP长连接不会轻易断开,所以使用长连接的好处就是减少建立连接和断开连接的过程。

      但是时间长了它也会占用内存过多,因此会采用以下两种方式来断开连接:

               1) 定期断开长连接

               2)客户端主动重置连接

 2.查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;(因为当有表更新之后,对应的语句就会被清除,所以会比较鸡肋)

3. 解析SQL:两个过程:

              1. 词法分析:根据输入的字符识别出来关键字,构建SQL语法树,方便后面的模块获取SQL类型,表名,字段名。

              2.语法分析:根据词法分析的语法树,判断该语句是否符合MySQL的语法。

4. 执行SQL 

    1. 预处理器:

                      检查SQL语句中的表和字段是否存在

                      将SQL语句中的 * 扩展为表中的所有列

    2. 优化器:

                      基于查询成本考虑,选择成本最小的执行计划。(主要选择主键索引还是二级索引)

   3. 执行器:

                       根据执行计划执行 SQL 查询语句,从存储引擎读取记录,返回给客户端;

MySQL一行记录是怎么存储的

MySQL数据文件存放在哪个文件?

一共有三个文件: db.opt  用来存放当前数据库的默认字符集和字符校验规则

                              t_order.frm 用来存放当前表结构

                              t_order.ibd 用来存放当前表数据(MySQL数据存放在这里)

表空间的文件结构:

 行:数据库表中的数据都是按行的形式存储,每行记录根据不同的行格式采用不同的存储结构。

页:每次只读取一行效率会很低,所以数据库读取数据都是以页为单位来读取数据。默认每个页的大小都是16KB。

区:Innodb存储引擎是以B+树的形式存储,B+树的每一层都是以双向链表的形式连接起来。但是链表中相邻的两个页之间并不是连续的,所以使用区的形式,让页与与页之间相邻。所以,当表中的数据量较大时,按照区为单位分配内存空间,每个区的大小为1MB。

段:表空间是由多个段组成,段由多个区组成。段有数据段,索引段,回滚段等

索引段:存放B+树中非叶子节点的区的集合

数据段:存放B+树中叶子节点的集合

回滚段:存放的是回滚数据的区的集合。

Innodb的行格式:COMPACT

Innodb的行格式一共分为两个部分:记录的额外信息,记录的真实数据

记录的额外信息一共分为三个部分:变长字段长度列表,NULL值列表,记录头信息。

记录的真实数据:

前面包含三个字段:

row_id : 当建表的时候设置了主键或者唯一约束,那么就不会有row_id字段。

trx_id : 事务id,表明了当前数据是由哪个事务生成的。

roll_pointer : 这条记录上一个版本的指针。 

总结:

MySQL的NULL值是怎么存放的:

是由Compact行格式中的NULL值列表来标记NULL的列,NULL不会存储在行格式中的真实数据部分。

MySQL如何知道varchar(n) 实际占用的数据大小:

利用行格式中的变长字段长度列表。

行溢出后,多余的数据怎么处理:

当一行存储不了所有的数据后,会将多余的数据存储到溢出页。并且在真实数据部分流出20KB的空间用来指向溢出页的地址。

               

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

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

相关文章

2023年ES的使用总结

1.Elasticsearch 非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容 什么是elasticsearch 一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控 什么是elastic stack 是以elasticsearch为核心的技术栈&#xf…

运算符重载函数作为类的成员函数——有理数的约分

目录 一、题目 二、代码 三、算法分析 (一)数学表达式 (二) 代码实现 一)运算符重载函数 二)优化函数(实现有理数约分) 一、题目 通过运算符重载为类的成员函数来实现两个有…

【云计算与虚拟化】第二章 实验一 VMware Workstation的使用

实验一 vmware workstation的使用 安装Windows Server 2012 R2虚拟机,并激活(计算机命名为:学号姓名拼音的首字母) 2.在Windows Server 2012 R2的虚拟机中安装VMTools 3.关机创建快照(快照命名为:学号姓名…

OMG Data Distribution Service(DDS)规范解读-Part4

目录 2.4 Listeners, Conditions, and Wait-sets2.4.1 Communication Status2.4.2 Changes in Status2.4.2.1 Plain communication statuses2.4.2.2 Read Communication Statuses 2.2.4.3 Access through Listeners2.2.4.3.1 Listener Access to Plain Communication Status2.2…

I2C总线

基于linux-3.14.16 一、注册I2C总线 以上代码即完成了i2c总线的注册,并且添加了一个i2c驱动dummy_driver 二、注册适配器 1、平台总线匹配 设备树有i2c1设备 平台总线匹配后执行probe 2、执行probe 获取中断号 获取地址资源并映射 填充i2c_adapter&#…

chatgpt赋能Python-python3_7如何安装matplotlib

Python3.7如何安装Matplotlib Matplotlib是一个Python的绘图库,可以帮助用户制作2D和3D图表和图形。它利用了NumPy、SciPy和其他Python包,具有出色的兼容性和可视化效果,广泛应用于数据分析、科学计算和工程领域。在本篇文章中,我…

chatgpt赋能Python-python2转3

Python2转3的最终结论 Python是一种流行的编程语言,但随着Python 2的维护结束,许多开发者正在考虑将他们的代码从Python 2升级到Python 3。这篇文章将介绍如何在搜索引擎优化(SEO)方面实现Python 2转3,并讨论为什么这…

页面样式问题收集及解决方案导航

1、el-table表头文字换行https://blog.csdn.net/qq_44747461/article/details/105976042 2、element-ui动态更改el-table某个单元格字体颜色:https://blog.csdn.net/agua001/article/details/107960393 Element UI 表格 el-table-column根据不同值显示不同颜色&…

ChatGPT工作提效之在程序开发中的巧劲和指令(创建MySQL语句、PHP语句、Javascript用法、python的交互)

ChatGPT工作提效之程序开发中的巧劲 前言一、创建MySQL数据表1.创建指令2.交互评价 二、PHP交互语句1.创建指令2.交互评价 三、javascript的交互用法1.创建指令2.交互评价 四、python的交互1.创建指令2.交互评价 总结 前言 ChatGPT是一个基于GPT模型训练的聊天机器人&#xff…

【Maven从入门到入土】

文章目录 1.Maven1.1 初识Maven依赖管理:统一项目结构 :项目构建 : 1.2 Maven概述1.2.1 Maven模型1.2.2 Maven仓库1.2.3 Maven安装 1.3 IDEA集成Maven1.3.1 配置Maven环境1.3.1.1 当前工程设置1.3.1.2 全局设置 1.3.2 Maven项目1.3.2.1 创建Maven项目1.3.2.2 POM配置…

代码随想录训练营Day37| 738.单调递增的数字 968.监控二叉树 总结

目录 学习目标 学习内容 738.单调递增的数字 968.监控二叉树 总结 学习目标 738.单调递增的数字 968.监控二叉树 总结 学习内容 738.单调递增的数字 738. 单调递增的数字 - 力扣(LeetCode)https://leetcode.cn/problems/monotone-increasing-di…

【云计算与虚拟化】第二章 实验二 Vmware Workstation 15的使用

实验二 Vmware Workstation 15的使用 在上一实验的基础上,将两台虚拟机调节到在桥接模式下,配置相应的网络参数,实现虚拟机1和2能相互通信,虚拟机1和2能够ping通外网,虚拟机1和2能ping通物理机。 (截取…

GE SR469-P5-HI-A20 带有5A相CT次级线圈的标准装置

SR469-P5-HI-A20提供四路4-20 mA模拟输出。该装置已通过CE认证。这是一个带有5A相CT次级线圈的标准装置。该装置的控制电源额定为90-300伏直流电,70-265伏交流电,48-62赫兹。 制造商美国通用电气公司,通用工业系统电压供应交流电:48-62赫兹时…

【云计算与虚拟化】第四章 实验一 在Windows 系统部署vCenter Server

实验一 在Windows 系统部署vCenter Server 1.部署两台ESXi6.0 虚拟主机,其余参数可以参考实验IP拓扑 2.在Windows Server 2012 R2中部署Storge服务器,该服务器名字为:姓名的拼音的首字母1,且要实现以下三个功能: (1)AD域控制…

【5.15】一、软件测试基础—软件概述

目录 1.1 软件概述 1.1.1 软件生命周期 1.1.2 软件开发模型 1.1.3 软件质量概述 1.1 软件概述 软件是相对于硬件而言的,它是一系列按照特定顺序组织的计算机数据和指令的集合。 软件的生命周期:软件从“出生” 到 “消亡” 的过程。 1.1.1 软件生…

超详细!Xmind的学习

哈喽,大家好。最近有小伙伴问使用xmind思维导图怎么快速上手,今天便给各位小伙伴出了这一期快速上手教程。思维导图的上手其实都是很简单的,只要知道基本功能的使用,基本上半天就能学会,一天就能熟练。 一、学习准备 …

【SpringBoot整合JWT】

目录 一、什么是JWT 二、JWT能做什么 三、为什么是JWT 1、基于传统的Session认证 2、基于JWT认证 四、JWT的结构是什么 五、JWT的第一个程序 六、封装JWT工具类 七、整合SpringBoot使用 一、什么是JWT JSON Web Token (JWT) is an open standard ([RFC 7519](http…

chatgpt赋能Python-python2转换为python3

Python 2到Python 3的转换和优化 在过去的几年中,Python 3已经成为了最流行的Python版本。因此,Python 2用户开始转向Python 3,以提高性能、安全性和可靠性。本文将讨论Python 2到Python 3的转换以及一些实用的优化技巧。 为什么要转向Pyth…

chatgpt赋能Python-python3_0列表排序方法

Python 3.0列表排序方法介绍 Python是一门广泛应用、适应性强的编程语言,而Python由于其简洁明了、易于学习、适合初学者的特点,是许多人最喜欢的编程语言之一。 Python 3.0列表排序方法是许多Python爱好者和开发者常用的功能之一。Python 3.0列表排序…

计算机网络 IP 1.1 IP基础知识

1. IP基本认识 网络层是实现主机与主机之间的通信。也叫点对点通信。 网络层(IP)和数据链路层(网络接口层)(MAC)有什么区别? IP是负责在没有直连的两个网络之间进行通信,MAC负责两个直连设备之间的通信。 只有两者一块使用&…