首页 > 数据库 >简单说说MySQL中 SELECT 语句执行流程

简单说说MySQL中 SELECT 语句执行流程

时间:2024-09-25 09:52:51浏览次数:3  
标签:语句 执行器 age 查询 索引 MySQL SELECT


流程讲解

MySQL 中 SELECT 语句的执行流程分为多个步骤,通常从用户发出查询请求到 MySQL 返回结果包含以下过程:

  1. 客户端/服务器通信
    用户向 MySQL 服务器发送 SELECT 查询语句。
  2. 查询解析(Parser)
    MySQL 收到 SQL 语句后,会将查询语句进行词法和语法分析。词法分析器将 SQL 语句拆解为关键字、表名、字段名等元素,然后语法分析器根据 MySQL 语法规则检查语句的合法性
  3. 预处理
    语法解析后,MySQL 会对查询语句进行预处理,例如:检查表、列是否存在,验证用户的权限等
  4. 查询优化器(Optimizer)
    这是 MySQL 查询性能的关键步骤。优化器决定如何执行查询,例如选择最优的索引,决定表连接顺序,选择全表扫描还是使用索引等。MySQL 的优化器会生成多个执行计划,选择成本最低的计划。
  5. 查询执行器(Executor)
    执行器根据优化器生成的执行计划去执行查询语句。执行器逐步获取数据,按优化器的指示选择适当的访问方式,如是否使用索引,是否需要回表等。
  6. 存储引擎层交互
    MySQL 是多存储引擎的系统。执行器根据存储引擎的接口与底层存储引擎交互,获取表中的数据。不同的存储引擎(如 InnoDB、MyISAM)处理查询的方式可能不同。
  7. 查询缓存(如果启用)
    在 MySQL 8.0 之前,如果查询缓存是开启的且查询结果在缓存中,那么 MySQL 可以直接从缓存中返回结果,而不需要继续执行查询。MySQL 8.0 已移除了查询缓存。
  8. 返回结果
    查询执行完毕后,MySQL 将结果返回给客户端。

select 实例分析

select * from tb_student A where A.age=‘18’ and A.name=’ 张三 ';

针对 SELECT * FROM tb_student A WHERE A.age='18' AND A.name='张三'; 这条 SQL 语句,MySQL 的执行流程可以分为如下几个步骤:

1. 客户端/服务器通信

用户在客户端执行该查询,SQL 语句通过网络传递到 MySQL 服务器。

2. 查询解析(Parser)

MySQL 服务器接收到查询语句后,会对 SQL 进行词法和语法解析。

  • 词法解析:SQL 语句被拆分为单个关键字或标识符,如 SELECT*FROMtb_studentWHEREA.age 等。
  • 语法解析:MySQL 根据 SQL 语法规则检查该查询语句的结构是否正确。如果语法有误,查询会立即失败。

3. 预处理

  • 表和列的合法性检查:MySQL 预处理器会检查表 tb_student 是否存在,字段 agename 是否在表 tb_student 中。
  • 用户权限检查:MySQL 还会验证当前用户是否有权限访问 tb_student 表并执行查询。

4. 查询优化器(Optimizer)

MySQL 的查询优化器将决定查询的最佳执行方式。对于这条查询,优化器可能做的工作包括:

  • 选择合适的索引:如果 agename 字段上有索引,优化器可能决定使用索引来加速查询。
  • 生成执行计划:优化器会评估多个执行计划,比如先通过 age='18' 过滤数据还是通过 name='张三' 过滤,然后选择代价最小的方案。例如,如果 agename 都有索引,优化器可能会选择一个索引作为主导。

5. 查询执行器(Executor)

查询执行器根据优化器生成的执行计划执行查询。假设 age 字段上有索引,那么执行器会:

  • 使用索引快速找到 age=18 的记录。
  • 然后根据 name='张三' 的条件进一步筛选数据。

6. 存储引擎层交互

执行器与底层存储引擎(如 InnoDB)交互,按执行计划获取数据。存储引擎会根据执行器的指令进行:

  • 读取操作:如果涉及到索引查找,存储引擎可能只需要扫描部分数据,而不是全表扫描。
  • 回表操作:如果使用了覆盖索引且所需字段都能从索引中获取,则直接返回;否则可能需要回表(通过主键索引)来获取 *(即所有列)。

7. 过滤和处理

执行器对查询结果进行过滤,确保返回的数据满足 age='18'name='张三' 两个条件。MySQL 将把符合条件的数据组装成查询结果集。

8. 返回结果

查询结果被发送回客户端,完成 SQL 语句的执行。


标签:语句,执行器,age,查询,索引,MySQL,SELECT
From: https://blog.51cto.com/u_16065421/12107260

相关文章

  • 如果值达到 800,如何创建 MySQL 函数来更新数据库?
    我试图让数据库每秒检查一次表,看看XP值是否达到800,如果达到,则将排名值设置为“EliteGenin”并将XP值设置为0。@bot.eventasyncdefon_message(message):guild=message.guild.idtable="PEOPLE_"+str(guild)try:connection=mysql.conn......
  • 我找不到一种方法让我的 python print 语句在几秒钟后自行删除
    我正在尝试制作一款基于文本的冒险游戏,我希望能够让文本自行删除。举个例子,游戏将使用print()语句打印文本,5秒后文本将被删除或对玩家隐藏。我试图找到其他人与此问题相关的问题,并且我找不到任何信息。我不知道该使用什么命令或与之相关的任何内容,请帮忙。Ivetriedtof......
  • MySQL 中存储过程参数的设置与使用
    在MySQL数据库中,存储过程是一组预先编译好的SQL语句集合,可以接受参数并返回结果。使用存储过程可以提高数据库的性能和可维护性,同时也可以减少网络流量和代码重复。那么,如何在MySQL中设置和使用存储过程的参数呢?本文将为你详细介绍。一、存储过程参数的类型在MySQL中,存储......
  • C语言中的转向语句
    在C语言中,转向语句用于改变程序的执行流。主要的转向语句包括goto、break和continue。它们各自有不同的用途和特性,能够在特定情况下简化或优化代码。本文将深入探讨这些语句,并通过复杂示例展示其应用。1.goto语句goto语句允许程序无条件跳转到程序中的某个标签。标......
  • MySQL 缓冲池管理与常见优化技巧
    在MySQL数据库的性能优化中,缓冲池的管理至关重要。同时,了解其他常见的优化技巧也能极大地提升数据库的运行效率。今天,我们就来深入探讨在MySQL中如何管理并调整缓冲池的大小,以及一些常见的优化技巧。一、缓冲池的重要性MySQL的缓冲池(BufferPool)是内存中的一块区域,用于缓存......
  • MySQL 中存储过程参数的设置与使用
    《MySQL中存储过程参数的设置与使用》在MySQL数据库中,存储过程是一组预先编译好的SQL语句集合,可以接受参数并返回结果。使用存储过程可以提高数据库的性能和可维护性,同时也可以减少网络流量和代码重复。那么,如何在MySQL中设置和使用存储过程的参数呢?本文将为你详细......
  • MySQL 缓冲池管理与常见优化技巧
    在MySQL数据库的性能优化中,缓冲池的管理至关重要。同时,了解其他常见的优化技巧也能极大地提升数据库的运行效率。今天,我们就来深入探讨在MySQL中如何管理并调整缓冲池的大小,以及一些常见的优化技巧。一、缓冲池的重要性MySQL的缓冲池(BufferPool)是内存中的一块区域,用......
  • Mysql高级篇(中)——事务篇
    事务篇一、数据库事务概述(1)概念(2)事务的处理原则(3)事务的特性(ACID)(4)事务的创建二、如何使用事务三、事务隔离级别(1)分类(2)实际生活场景示例理解(2)隔离级别的查看和设置四、事务日志(1)分类(2)使用一、数据库事务概述(1)概念事务是一组逻辑操作单元,使数据从一种状态变换到......
  • C# .net 8 used Pomelo.EntityFrameworkCore.MySql
    1.dotnetaddpackagePomelo.EntityFrameworkCore.MySqlusingMicrosoft.EntityFrameworkCore;namespaceConsoleApp84{internalclassProgram{staticvoidMain(string[]args){using(varcontext=newDbBookDataContex......
  • Docker Desktop (WSL)部署MySQL使用Navicat 16 for MySQL远程连接
    DockerDesktop(WSL)部署MySQL使用Navicat16forMySQL远程连接1.docker拉取镜像dockerpullmysql2.查看镜像dockerimages3.启动MySQL实例dockerrun-d-p3307:3306--name=mysql-eMYSQL_ROOT_PASSWORD=123456mysql命令详解参数详解-d在后台运行容......