• 技术文章 >数据库 >mysql教程

    MySQL学习之聊聊查询语句执行流程

    青灯夜游青灯夜游2023-01-11 20:38:55转载32

    如果想深入地学习 MySQL ,那么应该从宏观的架构上面着手,这一篇我们学习 MySQL 查询语句执行的流程,希望对大家有所帮助!

    本篇文章 MySQL 版本为 8.0.18

    架构图

    解析器

    解析器的作用是对客户端传来的 SQL 语句进行以下工作:

    预处理器

    解析器主要是检查语法词法方面,但是如果语法词法都正确,但是表、字段是不存在的,那么这段 SQL 语句也是无法正确执行的。

    所以预处理器的作用是:语义解析,判断解析树的语义是否正确,表、字段这些是否存在,预处理后会得到一颗新的解析树。

    查询优化器

    查询优化器结构

    在 MySQL 中一条 SQL 语句的执行方式有多种,虽然最终都会得到相同的结果,但是存在开销上的差异,具体选择哪一种执行方式是由查询优化器来决定的。比如说:

    查询优化器是基于开销(cost)的优化器,它的工作原理是根据解析树生成的多种执行计划,会评估各种执行方式所需的开销(cost),最终会得到一个开销最小的执行计划作为最终方案

    但是这个开销最小的执行方式不一定是最优的执行方式,比如本该使用索引,却进行了全表扫描等。虽然查询优化器中有《优化》两个字,但是这个优化并不是万能的,很多时候更加需要考虑 SQL 语句书写得是否合理。

    逻辑查询优化

    逻辑查询优化主要负责进行一些关系代数对 SQL 语句进行优化,从而使 SQL 语句执行效率更高

    逻辑查询优化我们可以使用几个案例来简单理解

    物理查询优化

    物理查询优化主要做的工作是根据 SQL 语句分别对多种执行计划进行开销的评估

    物理查询优化主要解决以下几个问题:

    简单了解一下代价评估,代价评估是基于 CPU 代价和 IO 代价两个维度的

    扫描方式代价评估公式
    顺序扫描N_page * a_page_IO_time + N_tuple * a_tuple_CPU_time
    索引扫描C_index + N_page_index * a_page_IO_time

    上述参数说明如下:

    关于索引成本计算可以参考这篇文章:MySQL查询为什么选择使用这个索引?——基于MySQL 8.0.22索引成本计算

    执行计划

    执行计划是查询优化器的产物,最终会交给存储引擎进行执行。执行计划可以帮助我们得知 MySQL 会怎么执行这条 SQL 语句。

    使用 explain 关键字查看 SQL 语句的执行计划,可以得到以下信息:

    存储引擎

    MySQL 服务端规定了数据如何存储、如何提取、如何更新的规范,这个规范由存储引擎来实现,不同的存储引擎的实现方式不同,所以不同的存储引擎会呈现其独特的功能和特点。其中最常用的存储引擎是 InnoDB 和 MyISAM

    简单说说这两款存储引擎的特点

    InnoDB:

    MyISAM

    存储引擎方面暂时先不展开,会在其他文章继续穿插他们的对比,以及会详细分析 InnoDB 更新数据的流程

    总结

    从前,只知道在客户端软件上写下 SQL 语句,点击执行,拿到数据

    到现在终于了解到一条查询语句传入 MySQL 服务端后需要经历这一系列的操作

    【相关推荐:mysql视频教程

    以上就是MySQL学习之聊聊查询语句执行流程的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    专题推荐:后端 MySQL 数据库
    上一篇:hive和mysql的区别有哪些 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 一文聊聊MySQL中的插入意向锁• 创建MySQL索引大幅优化某PHP应用性能• 聊聊怎么用MySQL快速实现一个推荐算法• mysql事务隔离级别有哪些• mysql怎么连接数据库
    1/1

    PHP中文网