MySQL:一条数据的存储之旅

数据库 MySQL
让我们从客户端(Client)开始。当你在应用程序中执行一个插入操作时,客户端就会发送一个SQL语句给MySQL服务器,告诉它你想要插入什么样的数据。

大家好,我是你们的小米,一个热爱技术分享的活泼小伙伴!今天,我来给大家揭开一个神秘的面纱,带你们深入了解一下MySQL数据库是如何保存一条数据的。

客户端

首先,让我们从客户端(Client)开始。当你在应用程序中执行一个插入操作时,客户端就会发送一个SQL语句给MySQL服务器,告诉它你想要插入什么样的数据。

服务端

接下来,我们来看看服务器端(Server)。当MySQL服务器接收到来自客户端的SQL语句时,它会进行一系列的处理。

  • 首先,连接器(Connector)负责与客户端建立连接。它会验证你的身份信息,并且为你分配一个线程来处理你的请求。
  • 连接建立好之后,分析器(Parser)就开始发挥作用了。分析器会将你发送过来的SQL语句进行解析,拆分成一组词法单元,也就是我们所说的Token。

词法分析(Lexical Analysis)是分析器的第一步,它会将SQL语句中的每个字符进行扫描,识别出关键字、标识符、常量等。这个过程将SQL语句转换成一系列的Token,每个Token都有自己的类型和值。

  • 在词法分析之后,语法分析器(Syntax Analysis))会根据语法规则检查Token之间的关系,并构建一棵抽象语法树(AST)。抽象语法树表示了SQL语句的结构,方便后续的处理。
  • 抽象语法树(Abstract Syntax Tree)是一种树状结构,它以语法规则为基础,将SQL语句的各个部分组织起来。每个节点代表一个语法结构,比如SELECT语句、FROM子句等。
  • 在抽象语法树中,每个节点都对应着一个Token。Token存储了SQL语句的具体信息,比如关键字、标识符、常量的类型和值。
  • 当抽象语法树构建完成后,MySQL的优化器(Optimizer)登场了。优化器会对查询进行优化,选择最优的执行计划。它可以根据表的统计信息、索引信息等来做出决策。
  • 成本优化器(CBO)是MySQL优化器的一种策略,它会根据查询的成本估计来选择最佳的执行计划。CBO会考虑许多因素,比如表的大小、索引的选择、IO成本等。
  • 规则优化器(RBO)是另一种优化器策略,它会根据一组预定义的规则来选择执行计划。RBO比较简单直观,但缺乏CBO的智能化和自适应能力。
  • 优化器选择好执行计划后,执行器(Executor)就开始工作了。执行器负责实际执行查询,并将结果返回给客户端。

存储引擎

最后,让我们来看看存储引擎(Storage Engine)。MySQL支持多种存储引擎,比如InnoDB、MyISAM等。存储引擎负责将数据存储到磁盘上。

当执行器需要插入一条数据时,它会将数据传递给存储引擎。存储引擎会将数据写入到对应的表中,同时确保数据的持久性和一致性。

总结

总结一下,一条数据在MySQL中保存的过程可以分为:客户端发送SQL语句,连接器建立连接,分析器解析SQL语句生成抽象语法树,优化器选择执行计划,执行器执行查询,存储引擎将数据写入磁盘。这个过程经历了多个组件的协同工作,才能最终完成数据的保存。

图片


责任编辑:武晓燕 来源: 知其然亦知其所以然
相关推荐

2018-03-30 09:42:05

2019-06-24 11:07:34

数据数据库存储

2020-09-03 20:10:23

Elasticsear存储数据

2024-09-09 08:15:20

2020-03-03 11:35:40

PythonMySQL数据

2012-11-16 15:22:57

Atom微服务器小型网络

2024-07-29 09:49:00

SQLMySQL执行

2011-05-12 14:43:57

MYSQL

2024-04-15 08:30:53

MySQLORM框架

2024-04-19 07:31:58

MySQL数据库

2021-09-12 07:26:49

MySQL SQL 语句数据库

2010-04-13 16:57:01

2023-01-03 07:44:53

MySQL查询重复

2023-02-26 23:31:01

SQL数据库

2019-02-18 11:50:49

技术黑客网络安全

2023-11-01 16:50:58

2019-03-28 10:09:49

内存CPU硬盘

2009-08-05 10:43:19

CISSPBCPDRP

2011-08-17 09:13:08

MySQL数据库多条记录的单个字段

2011-03-21 17:19:12

LAMPUbuntu
点赞
收藏

51CTO技术栈公众号