首页 > 数据库 >【MySQL内核】MySQL中一条 SQL语句是如何执行的?

【MySQL内核】MySQL中一条 SQL语句是如何执行的?

时间:2024-12-15 21:31:42浏览次数:5  
标签:语句 缓存 MySQL 查询 内核 SQL 执行

MySQL执行一条SQL语句,涉及到以下几个过程:

1、客户端连接

要执行 SQL 语句,首先用户需要通过客户端连接到MySQL服务器,连接时需要指定用户名和密码,MySQL服务器中的连接器模块会对用户提供的用户名和密码进行验证,并检查用户是否拥有执行特定SQL语句的权限。一个用户成功建立连接后,即使管理员对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有新建的连接才会使用新的权限设置。

2、查询缓存

如果执行的是一条查询语句,MySQL会先到查询缓存中查找之前是不是执行过这条语句,如果能在缓存中找到,就直接返回查询结果。如果找不到,就继续往下执行。需要注意的是,如果一个表经常更新,查询缓存就会被频繁清空,导致缓存的命中率非常低,所以MySQL 8.0 版本后,查询缓存的功能被删掉了。

3、解析SQL

在执行某条SQL语句之前,MySQL需要先弄懂它的含义,所以需要解析器对 SQL 语句做解析。解析器首先会对SQL语句进行词法分析,也就是将SQL语句字符串中的关键字识别出来,比如select,from等等。接着解析器再根据词法分析的结果,对SQL语句进行语法分析构建出 SQL 语法树,方便后面模块获取 SQL 类型、表名、字段名、 where 条件等等。


4、执行SQL

在正式执行SQL之前,还会经过预处理和优化两个阶段。预处理阶段,预处理器会检查 SQL 语句中的表或者字段是否存在。优化阶段,优化器负责将SQL语句的执行方案确定下来,比如在表里面有多个索引的时候,优化器会基于查询成本的考虑,来决定选择使用哪个索引。

经过优化器确定执行方案后,就由执行器真正开始执行SQL语句,执行器通过API与存储引擎交互,获取数据或对数据进行修改,并将执行结果返回给用户。

总结

MySQL执行一条SQL语句,会经过连接器处理客户端连接、查询缓存、解析器进行词法分析和语法分析生成语法树、预处理器检查表名和字段名、优化器确定最优执行计划以及最后执行器与存储引擎交互进行数据操作等多个流程。

原创 coderxiaozhi 编程十万问

标签:语句,缓存,MySQL,查询,内核,SQL,执行
From: https://www.cnblogs.com/o-O-oO/p/18608759

相关文章

  • 【MySQL内核】MySQL中的表数据是如何存储的?
    MySQL是基于磁盘进行数据存储的关系型数据库,所有的数据和索引都以磁盘文件的方式存储,在有需要时载入内存读取。MySQL支持多种存储引擎,不同的存储引擎保存的文件不同。InnoDB是MySQL使用最为广泛的存储引擎,下面我们以InnoDB引擎为例来说明。当我们创建一个数据库表时,InnoDB会......
  • PostgreSQL约束延迟生效
    PostgreSQL约束延迟生效当我们对一张表上的数据进行操作时,如果该表上有约束存在,那么约束是在什么时候生效的呢?例如我们在进行数据迁移的时候就会考虑的这个问题,有的迁移工具在迁移的时候必须得将表约束和数据分开迁移,否则会出现数据无法导入的情况,这就是因为约束不能延迟导致的......
  • MySQL基础 数据库表的增删改
    文章目录Mysql一、原理定义概念定义安装Mysql.......二、数据库管理2.1内置客户端操作三、数据表管理3.1内置客户端操作四、SQL-DQL概念scott用例表DQL语句Mysql一、原理定义概念定义数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算......
  • MySQL基础函数使用
    DQL中的函数#官方函数链接https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format4.1单行函数函数都是数据库提前给我们准备好的,所以我们可以直接调用,使用函数可以让指定的列计算出我们需要的数据单行函数:指的是操作一行......
  • MySQL 插入一条 SQL 语句,redo log 记录的是什么?
    MySQL插入一条SQL语句,redolog记录的内容在MySQL的InnoDB存储引擎中,redolog(重做日志)主要用来保证事务的持久性和崩溃恢复能力。redolog记录的是对数据页的物理变更,而不是SQL语句本身。当执行一条插入语句时,redolog的记录主要包括对数据页的修改信息,以及事务相关......
  • MySQL 无法远程连接?
    MySQL无法远程连接?先看清楚报错信息,一般都有解答。虽然报错信息写的有点难懂0.云服务器商防火墙与服务器防火墙请登陆你的云服务器防火墙管理web进行相关配置。服务器本身的防火墙配置可以使用:sudoufwstatusSTFW!1.mysqldeamon配置问题/etc/mysql/mysql.conf.......
  • MySQL 事务的二阶段提交是什么?
    MySQL事务的二阶段提交是什么?二阶段提交(Two-PhaseCommit,2PC)是分布式事务中的一种协调协议,用于确保多个资源(如数据库或数据节点)在事务提交时保持一致性。MySQL在存储引擎(如InnoDB)和Binlog(归档日志)之间使用二阶段提交来保证事务的一致性。在MySQL中,二阶段提交的典型场景......
  • MySQL 三层 B+ 树能存多少数据?
    MySQL三层B+树能存多少数据?MySQL的B+树索引结构广泛用于存储引擎(如InnoDB)中,用于实现高效的查询。B+树的高度和每一层的节点数量直接影响其存储能力。以下是计算三层B+树能存储的数据量的过程。B+树的存储结构概述节点大小:在InnoDB中,B+树的每个节点(页)大小通常......
  • MySQL 在设计表(建表)时需要注意什么?
    MySQL在设计表(建表)时需要注意的要点设计数据库表是MySQL开发中非常重要的一环。合理的表结构设计可以提升性能、减少存储开销,并提高维护性。以下是一些关键的注意事项:1.明确需求和数据建模在建表前,应深入了解业务需求,完成详细的数据建模。使用工具(如ER图)设计清晰的表......
  • (免费领源码)python#Django#mysql餐厅点餐管理系统06940-计算机毕设 原创
                                              目 录摘要1绪论1.1研究背景与意义1.2开发现状1.3Django框架介绍1.3论文结构与章节安排2 餐厅点餐管理系统系统分析2.1可......