MySQL执行select语句内部流程

本文详细解析了MySQL执行SELECT语句的过程,包括查询缓存、解析器处理、预处理器、优化器、执行计划、执行器及存储引擎等模块的工作原理。

整体流程

一般来说,数据是存储到服务端的,所以从客户端读取服务端数据要经历如下几个过程:
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.存储引擎

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值