首页 > 数据库 >MySQL 执行一条查询语句的内部执行过程?

MySQL 执行一条查询语句的内部执行过程?

时间:2023-12-13 11:32:44浏览次数:42  
标签:语句 查询 索引 MySQL 执行 优化


  • 客户端先通过连接器连接到 MySQL 服务器。
  • 连接器权限验证通过之后,先查询是否有查询缓存,如果有缓存(之前执行过此语句)则直接返回缓存数据,如果没有缓存则进入分析器。
  • 分析器会对查询语句进行语法分析和词法分析,判断 SQL 语法是否正确,如果查询语法错误会直接返回给客户端错误信息,如果语法正确则进入优化器。
  • 优化器是对查询语句进行优化处理,例如一个表里面有多个索引,优化器会判别哪个索引性能更好。
  • 优化器执行完就进入执行器,执行器就开始执行语句进行查询比对了,直到查询到满足条件的所有数据,然后进行返回。

MySQL 执行一条查询语句的内部执行过程可以概括为以下几个步骤:

  1. 查询解析:MySQL接收到查询语句后,首先进行查询解析的过程。在这个过程中,MySQL会对查询语句进行语法解析、语义解析和语句优化。它会检查查询语句的语法是否正确,并确定查询涉及的表、列、条件等信息。
  2. 查询优化:在查询优化阶段,MySQL会根据查询的复杂性和查询执行计划的成本估算,选择最优的查询执行计划。这个过程涉及到索引选择、连接顺序决定、Join优化、子查询优化等步骤。MySQL使用统计信息和索引信息来评估各种可能的执行计划,并选择成本最低的执行计划。
  3. 执行查询计划:一旦查询优化完成并选择了最优的执行计划,MySQL会开始执行查询计划。这包括从磁盘读取数据页、应用过滤条件、执行连接操作以及排序和分组等操作。MySQL会通过访问数据字典和索引来检索所需的数据。
  4. 结果返回:当查询执行完成后,MySQL会将结果返回给客户端。结果可以是一组行数据,也可以是一个标量值。

需要注意的是,上述过程是一个高层次的概述,实际的查询执行过程非常复杂而且高度优化。MySQL使用了许多技术和算法来提高查询性能,例如索引、缓存、并行执行等。此外,MySQL还会根据具体的查询类型和条件进行不同的优化和处理,例如对于JOIN操作和子查询等特殊情况会有额外的优化策略。因此,具体的查询执行过程会因查询语句的复杂性和条件而有所差异。


标签:语句,查询,索引,MySQL,执行,优化
From: https://blog.51cto.com/zhangxueliang/8799860

相关文章

  • MySQL 提示“不存在此列”是执行到哪个节点报出的?
    在MySQL中,当执行一条查询语句时,如果出现"不存在此列"的错误提示,通常是在查询解析阶段报出的。查询解析是MySQL执行查询语句的第一个阶段,它负责对查询语句进行语法解析和语义解析。在这个阶段,MySQL会检查查询语句中的表、列、函数等是否存在,并验证其正确性。如果查询语句中引用了不......
  • 理解Mysql索引原理及特性
    作为开发人员,碰到了执行时间较长的sql时,基本上大家都会说”加个索引吧”。但是索引是什么东西,索引有哪些特性,下面和大家简单讨论一下。1索引如何工作,是如何加快查询速度索引就好比书本的目录,提高数据库表数据访问速度的数据库对象。当我们的请求打过来之后,如果有目录,就会快速的......
  • windows安装mysql时卡write configuration file曲线救国 mysql 5.7.39 免安装(ZIP压缩
    现象描述现象描述:使用安装包安装时,卡:writeconfigurationfile解决办法解决办法:曲线救国mysql5.7.39免安装(ZIP压缩包)版本安装配置1.下载mysql官网:mysql官网,点击前往2.安装下载后解压到任意文件夹,如我所解压的路径为:D:\ProgramFiles\MySQL\mysql-5.7将解压......
  • SQL语句性能优化策略(转)
    本文会提到52条SQL语句性能优化策略。1、对查询进行优化,应尽量避免全表扫描,首先应考虑在WHERE及ORDERBY涉及的列上建立索引。2、应尽量避免在WHERE子句中对字段进行NULL值判断,创建表时NULL是默认值,但大多数时候应该使用NOTNULL,或者使用一个特殊的值,如0,-1作为......
  • C# 从代码入门 Mysql 数据库事务
    目录生成数据库数据Mysql数据库事务基础数据库的并发一致性问题数据库事务的隔离级别BeginTransaction()和TransactionScope的区别BeginTransaction()可以不手动撤销TransactionScope总结DML是否可以使用事务顺序多操作嵌套事务事务范围封装DbContextTransactionScopeBeginT......
  • 无涯教程-Java - for 语句函数
    for循环是一种重复控制结构,可让您有效地编写需要执行特定次数的循环。for-语法for(initialization;Boolean_expression;update){//Statements}for-示例以下是Java中for循环的示例代码。publicclassTest{publicstaticvoidmain(Stringargs[]){......
  • 【SpringBootWeb入门-11】MySQL-概述-安装配置
    1、入门前言之前的文章我们讲解了javaweb的springboot框架的入门学习,javaweb开发-数据库也是我们需要学习的核心之一,接下来我们进入MySQL的学习,本篇内容主要讲解MySQL的安装以及配置。2、MySQL下载MySQL官方给我们提供了两种不同的版本:商业版本和社区版本,具体区别如下图:我们......
  • 无涯教程-Java - while 语句函数
    只要给定条件为真(true),Java编程语言中的while循环语句就会重复执行目标语句。while-语法while(Boolean_expression){//Statements}在这里,声明可以是单个语句或语句块。条件可以是任何表达式,并且true是任何非零值。while-示例publicclassTest{publics......
  • mysql 企业表和员工表,一旦企业下面有员工就不允许删除企业。如何通过外键设置实现呢
    简述mysql企业表和员工表,一旦企业下面有员工就不允许删除企业。如何通过外键设置实现呢前情提示系统:一说部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤带有#号、删除线、不操作、不执行字样的为提示或者备份bash,实际不执行如果无法下......
  • mysql的ON DELETE CASCADE 和ON DELETE RESTRICT区别
    ONDELETECASCADE和ONDELETERESTRICT是MySQL中两种不同的外键约束级联操作。它们之间的主要区别在于当主表中的记录被删除时,子表中相关记录的处理方式。ONDELETECASCADE:当在主表中删除一条记录时,所有与之相关的子表中的匹配记录也会被自动删除。这通常用于强耦合的关系,......