MySQL查询语句执行流程
发布时间:2023-06-30 10:00:19 所属栏目:MySql教程 来源:
导读:这篇“MySQL查询语句执行流程是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这
这篇“MySQL查询语句执行流程是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL查询语句执行流程是什么”文章吧。 解析器 解析器的作用是对客户端传来的 SQL 语句进行以下工作: 语法解析:检查 SQL 语句的语法,括号、引号是否闭合等 词法解析:把 SQL 语句中的关键词、表名、字段名拆分成一个个节点,最终得到一颗解析树 预处理器 解析器主要是检查语法词法方面,但是如果语法词法都正确,但是表、字段是不存在的,那么这段 SQL 语句也是无法正确执行的。 所以预处理器的作用是:语义解析,判断解析树的语义是否正确,表、字段这些是否存在,预处理后会得到一颗新的解析树。 在 MySQL 中一条 SQL 语句的执行方式有多种,虽然最终都会得到相同的结果,但是存在开销上的差异,具体选择哪一种执行方式是由查询优化器来决定的。 表中有多个索引可以选择,具体选择哪一个索引 当我们对多张表进行关联查询时,以哪一张表的数据为基准表 查询优化器是基于开销(cost)的优化器,它的工作原理是根据解析树生成的多种执行计划,会评估各种执行方式所需的开销(cost),最终会得到一个开销最小的执行计划作为最终方案。 但是这个开销最小的执行方式不一定是最优的执行方式,比如本该使用索引,却进行了全表扫描等。 逻辑查询优化 逻辑查询优化主要负责进行一些关系代数对 SQL 语句进行优化,从而使 SQL 语句执行效率更高 逻辑查询优化我们可以使用几个案例来简单理解 物理查询优化主要解决以下几个问题: 单表扫描中采用哪种方式是开销最小的(扫描索引+回表 or 全表扫描) 存在表连接的时候使用哪种连接方式是开销最小的 简单了解一下代价评估,代价评估是基于 CPU 代价和 IO 代价两个维度的 扫描方式 代价评估公式 顺序扫描 N_page * a_page_IO_time + N_tuple * a_tuple_CPU_time 索引扫描 C_index + N_page_index * a_page_IO_time 上述参数说明如下: a_page_IO_time, 一个数据页加载的IO耗时 N_page,数据页数量 N_tuple,元组数(元组理解为一行数据) a_tuple_CPU_time,一个元组从数据页中解析的CPU耗时 C_index,索引的IO耗时 N_page_index,索引页数量 执行计划 执行计划是查询优化器的产物,最终会交给存储引擎进行执行。执行计划可以帮助我们得知 MySQL 会怎么执行这条 SQL 语句。 使用 explain 关键字查看 SQL 语句的执行计划,可以得到以下信息: id:嵌套查询中查询的执行顺序 possible_keys:本次查询可能用到的索引 Key:实际用到的索引 rows:得到结果大概要检索多少行数据 select_type多表之间的连接类型 extra:额外的信息,是否有索引覆盖、索引下推等 以上就是关于“MySQL查询语句执行流程是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐