返回顶部
首页 > 资讯 > 数据库 >mysql中执行查询语句的流程分析
  • 323
分享到

mysql中执行查询语句的流程分析

2024-04-02 19:04:59 323人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关Mysql中执行查询语句的流程分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。比如,在我们从student表中查询一个id=2的信息selec

这篇文章给大家分享的是有关Mysql中执行查询语句的流程分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

比如,在我们从student表中查询一个id=2的信息

select * from student where id=2;

在解释这条语句执行流程之前,我们看看mysql的基础架构

mysql中执行查询语句的流程分析

图来自极客时间的mysql实践,该图是描述的是MySQL的逻辑架构。

  • server层包括连接器、查询缓存、分析器、优化器、执行器涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视等。

  • 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory 等多个存储引擎,平常我们比较常用的是innoDB引擎

mysql中执行查询语句的流程分析

连接器

我们在使用数据库之前,需要连接到数据库,连接语句是

mysql -h $ip -u $username -p $passWord

而我们的连接器就是处理这个过程的,连接器的主要功能是负责跟客户端建立连接、获取权限、维持和管理连接,连接器在使用的过程中如果该用户的权限改变,是不会马上生效的,因为用户权限是在连接的时候读取的,只能重新连接才可以更新权限

连接器与客户端通信的协议是tcp协议的,连接以后可以使用show processlist;看到执行的连接数

mysql中执行查询语句的流程分析

同时在连接时间内超过8小时是sleep的状态会自动断开,这个是mysql默认设置,如果一直不断开,那么这个过程可以叫做一个长连接。

与之对应的有短连接,短连接是指在执行一条或几条的以后断开连接。

当不断使用长连接的时候会占用很大的内存资源,在mysql5.7以后可以使用mysql_reset_connection语句来重新初始化资源。

查询缓存

经过连接以后,就连接上数据库了,这个时候可以执行语句了。

执行语句的时候,mysql首先是去查询缓存,之前有没有执行过这样的语句,mysql会将之前执行过的语句和结果以key-value的形式存储起来(当然有一定的存储和实效时间)。如果存在缓存,则直接返回缓存的结果。

缓存的工作流程是

  • 服务器接收SQL,以SQL和一些其他条件为key查找缓存表

  • 如果找到了缓存,则直接返回缓存

  • 如果没有找到缓存,则执行SQL查询,包括原来的SQL解析,优化等。

  • 执行完SQL查询结果以后,将SQL查询结果缓存入缓存表

当然,如果这个表修改了,那么使用这个表中的所有缓存将不再有效,查询缓存值得相关条目将被清空。所以在一张被反复修改的表中进行语句缓存是不合适的,因为缓存随时都会实效,这样查询缓存的命中率就会降低很多,不是很划算。

当这个表正在写入数据,则这个表的缓存(命中缓存,缓存写入等)将会处于失效状态,在Innodb中,如果某个事务修改了这张表,则这个表的缓存在事务提交前都会处于失效状态,在这个事务提交前,这个表的相关查询都无法被缓存。

一般来说,如果是一张静态表或者是很少变化的表就可以进行缓存,这样的命中率就很高。

下面来说说缓存的使用时机,衡量打开缓存是否对系统有性能提升是一个很难的话题

  • 通过缓存命中率判断, 缓存命中率 = 缓存命中次数 (Qcache_hits) / 查询次数 (Com_select)

  • 通过缓存写入率, 写入率 = 缓存写入次数 (Qcache_inserts) / 查询次数 (Qcache_inserts)

  • 通过 命中-写入率 判断, 比率 = 命中次数 (Qcache_hits) / 写入次数 (Qcache_inserts), 高性能MySQL中称之为比较能反映性能提升的指数,一般来说达到3:1则算是查询缓存有效,而最好能够达到10:1

分析器

在查询缓存实效或者是无缓存的时候,这个时候MySQL的server就会利用分析器来分析语句,分析器也叫解析器。

MySQL分析器由两部分组成,第一部分是用来词法分析扫描字符流,根据构词规则识别单个单词,MySQL使用Flex来生成词法扫描程序在sql/lex.h中定义了MySQL关键字和函数关键字,用两个数组存储;第二部分的功能是语法分析在词法分析的基础上将单词序列组成语法短语,最后生成语法树,提交给优化器语法分析器使用Bison,在sql/sql_yacc.yy中定义了语法规则。然后根据关系代数理论生成语法树。

上面解释分析器太官方和复杂了,其实分析器主要是用来进行“词法分析”然后知道这个数据库语句是要干嘛,代表啥意思。

这个时候如果分析器分析出这个语句有问题的时候会报错,比如ERROR 1064 (42000): You have an error in your SQL syntax

优化器

在分析器分析完了以后知道这个语句是干嘛的时候,接下来是专门用一个优化器进行语句优化,优化器的任务是发现执行SQL查询的最佳方案。大多数查询优化器,包括MySQL的查询优化器,总或多或少地在所有可能的查询评估方案中搜索最佳方案。

优化器主要是选择一个最佳的执行方案,执行方案是为了减少开销,提高执行效率。

MySQL的优化器是一个非常复杂的部件,它使用了非常多的优化策略来生成一个最优的执行计划:

  • 重新定义表的关联顺序(多张表关联查询时,并不一定按照SQL中指定的顺序进行,但有一些技巧可以指定关联顺序)

  • 优化MIN()和MAX()函数(找某列的最小值,如果该列有索引,只需要查找B+Tree索引最左端,反之则可以找到最大值,具体原理见下文)

  • 提前终止查询(比如:使用Limit时,查找到满足数量的结果集后会立即终止查询)

  • 优化排序(在老版本MySQL会使用两次传输排序,即先读取行指针和需要排序的字段在内存中对其排序,然后再根据排序结果去读取数据行,而新版本采用的是单次传输排序,也就是一次读取所有的数据行,然后根据给定的列排序。对于I/O密集型应用,效率会高很多)

随着MySQL的不断发展,优化器使用的优化策略也在不断的进化,这里仅仅介绍几个非常常用且容易理解的优化策略而已。

执行器

在分析器知道语句要干什么,优化器知道怎么做以后,下面就到了执行的阶段,执行是交给执行器的。

执行器在执行的时候首先判断该用户对该表有没有执行权限,如果没有则会返回denied之类的错误提示。

如果有权限,则会打开表继续执行。打开表的时候,执行器会根据表定义的引擎,去使用该引擎的接口。

最后执行语句得到数据返回给客户端。

总结

MySQL得到sql语句后,大概流程如下:

0.连接器负责和客户端进行通信

1.查询缓存:首先查询缓存看是否存在k-v缓存

2.解析器:负责解析和转发sql

3.预处理器:对解析后的sql树进行验证

4.优化器:得到一个执行计划

5.查询执行引擎:执行器执行语句得到数据结果集

6.将数据放回给调用端。

感谢各位的阅读!关于“mysql中执行查询语句的流程分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

您可能感兴趣的文档:

--结束END--

本文标题: mysql中执行查询语句的流程分析

本文链接: https://lsjlt.com/news/57321.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql中执行查询语句的流程分析
    这篇文章给大家分享的是有关mysql中执行查询语句的流程分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。比如,在我们从student表中查询一个id=2的信息selec ...
    99+
    2024-04-02
  • MySQL查询语句的执行过程实例分析
    这篇文章主要讲解了“MySQL查询语句的执行过程实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL查询语句的执行过程实例分析”吧!1、MYSQ...
    99+
    2024-04-02
  • MySQL查询语句执行流程是什么
    这篇“MySQL查询语句执行流程是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL查询语句执行流程是什么”文章吧...
    99+
    2023-07-05
  • Mysql查询语句执行过程 - G
    Mysql查询语句执行过程   Mysql分为server层和存储引擎两部分,或许可以再加一层连接层   连接层(器) Mysql使用的是典型的C/S架构。连接器通过典型的TCP握手完成连接。 需要注的是, 如果用户名和密码都正确...
    99+
    2021-12-15
    Mysql查询语句执行过程 - G
  • 分析mysql中一条SQL查询语句是如何执行的
    目录一、MySQL 逻辑架构概览二、连接器(Connector)三、查询缓存(Query Cache)四、解析器(Parser)五、优化器(Optimizer)六、执行器七、小结一、MySQL 逻辑架构概览 MySQ...
    99+
    2022-05-30
    mysql 查询 查询 执行过程
  • mysql中SQL语句的执行流程
    今天就跟大家聊聊有关mysql中SQL语句的执行流程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。       &n...
    99+
    2024-04-02
  • MySQL执行一条查询语句的过程
      执行流程 如下图所示,我们可以看到当向 MySQL 发送一个请求时,MySQL 到底做了什么:   客户端发送一条査询给服务器。 服务器先检查査询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进人下一阶段。 服务器端进...
    99+
    2018-04-18
    MySQL执行一条查询语句的过程
  • 详解MySQL 查询语句的执行过程
    首先先简单的将一个查询语句背后MySQL做了什么捋一捋: 客户端发送一条查询给服务器。 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一个阶段。 服务器端进行SQL解析,...
    99+
    2022-05-19
    MySQL 查询语句 MySQL 查询语句执行过程
  • mysql的sql语句执行流程
    1、client和server建立连接,client发送sql至server(对应连接器这一过程) 2、server如果在查询缓存中发现了该sql,则直接使用查询缓存的结果返回给client,如果查询缓存中...
    99+
    2024-04-02
  • Mysql Join语句执行流程
    JOIN主要使用 Index Nested-Loop Join 和 Block Nested-Loop Join 算法实现 Index Nested-Loop Join 如果 join on 相关的字段存在索引就使用 Index Nes...
    99+
    2018-10-17
    Mysql Join语句执行流程
  • SQL查询语句执行顺序的示例分析
    这篇文章主要介绍SQL查询语句执行顺序的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SQL查询语句执行顺序如下:(7) SELECT  (8)&...
    99+
    2024-04-02
  • SQL查询语句执行的过程
    目录MySQL基本架构Server 层1、连接器2、查询缓存3、分析器4、优化器5、执行器SQL语句举例: SELECT * FROM `test` WHERE `i...
    99+
    2024-04-02
  • MySQL查询语句的执行过程有哪些
    本篇文章为大家展示了MySQL查询语句的执行过程有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。查询请求的执行流程众所周知在MySQL数据库应用中查询请求是使用...
    99+
    2024-04-02
  • MySQL查询语句的执行过程是什么
    这篇文章主要介绍MySQL查询语句的执行过程是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先先简单的将一个查询语句背后MySQL做了什么捋一捋:客户端发送一条查询给服务器。服务器先检查查询缓存,如果命中了缓存...
    99+
    2023-06-14
  • SQL查询语句的执行顺序解析
    SQL语句执行顺序 结合上图,整理出如下伪SQL查询语句。 从这个顺序中我们可以发现,所有的查询语句都是从 FROM 开始执行的。在实际执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。...
    99+
    2021-04-08
    SQL查询语句的执行顺序解析
  • Mysql 更新语句执行流程
    与查询流程不一样的是,更新流程涉及两个重要的日志模块,redo log和 binlog redo log 如果每一次的更新操作都需要写进磁盘,然后磁盘也 要找到对应的那条记录, 然后再更新,整个过程 IO 成本、查找成本都很高 Mysql使...
    99+
    2014-08-15
    Mysql 更新语句执行流程
  • MySQL怎么执行联合查询语句
    在MySQL中,可以使用UNION关键字来执行联合查询语句。联合查询可以将多个SELECT语句的结果合并为一个结果集...
    99+
    2024-03-06
    MySQL
  • MariaDB中怎么执行查询语句
    在MariaDB中执行查询语句可以使用以下步骤: 打开MariaDB命令行终端或者使用图形化界面工具连接到MariaDB数据库。...
    99+
    2024-04-09
    MariaDB
  • SQL语句执行深入讲解(MySQL架构总览->查询执行流程->SQL解析顺序)
    前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了。 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探...
    99+
    2024-04-02
  • MySQL执行SQL语句的流程详解
    目录1、通常sql执行流程1.1 问题1:mysql谁去处理网络请求?1.2 问题2:MySQL如何执行sql语句?1.3 查询解析器1.4 查询优化器1.5 存储引擎1.6 执行器2、总结1、通常sql执行流程 用户...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作