MySQL执行select语句内部流程

  • 整体流程
  • 模块详解
  • 1.查询缓存
  • 2.解析器处理
  • 3.预处理器
  • 4.优化器
  • 5.执行计划
  • 6.执行器
  • 7.存储引擎


整体流程

一般来说,数据是存储到服务端的,所以从客户端读取服务端数据要经历如下几个过程:
client–>query cache(查询缓存-默认关闭)–>parse(解析器)–>pre processor(预处理器)–>optimizer(优化器)–>execution plans(执行计划)–>Executor(执行器)–>storage engine(存储引擎)–>client

模块详解

1.查询缓存

客户端请求的SELECT语句,首先会请求存储引擎进行缓存的查询,如果有这条SQL语句,就直接取出来,不需要进行后面的操作。但是在MySQL中的缓存是默认关闭的,其原因主要是:
1.因为对于SQL语句的缓存必须保持每次缓存的格式必须完全一样。2.如果修改数据库中的一条数据会更新整个缓存。

2.解析器处理

在第一步中,如果没有从存储引擎里面查询到缓存SQL的话就会交给解析器处理SQL语句,其主要包括:1.词法分析:扫描字符流,根据构词规则识别单个单词。2.语法分析:在词法分析的基础上将单词序列组成语法短语最后生成语法树。

3.预处理器

预处理器的目的就是为了减小MySQL服务器的压力,通过解析器解析后的数据,预处理器将SQL语句分为两部分(语义分析):第一部分为前面相同的命令和结构部分;第二部分为后面可变的数据部分。

4.优化器

在MySQL执行SQL语句时,可能不会按照我们写的顺序执行,同时也不需要我们认为的从左到右安排where后面的条件,所以优化器会重写SQL,然后找出最佳查询方法(查询优化)。

5.执行计划

MySQL的执行计划默认是关闭的,在面对亿万级数据的时候,当我们查询效率不高的时候,就可以通过执行计划知道查询的瓶颈在哪里,是否需要索引以及改变SQL语句。

6.执行器

操作存储引擎,返回结果。

7.存储引擎

只用于存储数据,给服务层提供读写的接口。