【Mysql】执行一条select语句经过了哪些过程?

本文是自己学习的一些总结,比较口语化,主要是为了加强记忆,和希望与大家分享。欢迎大佬们批判和指正!

【建立连接——查缓存——解析SQL语句——执行SQL语句】

【建立连接】mysql执行select语句的过程,要操作mysql数据库,那就得先从建立连接开始。它需要经过TCP的三次握手连接。当然了,这其中有很多细节的的问题需要注意到,比如mysql数据库支持多少个连接(默认是151个),连接长时间不用会不会断开(默认8h不用会断开)。

【查缓存】连接建立之后,在旧版本是会走缓存的,而在8.0之后的版本缓存这块是被删除了的。因为这缓存其实是有鸡肋的,它是key-value的形式,然后key是保存的select语句,value是查询结果。但是,有一个update语句发生,整张表的缓存数据都需要更新,那么如果表比较大的话,这个缓存更新就是非常消耗的。

【解析SQL语句】8.0之后不走缓存,直接去解析sql语句,在这个阶段,解析器会去提取输入的sql语句的关键字,构建SQL语法树,然后根据词法规则判断这条sql语句符不符合语法要求。

【执行SQL语句】

执行SQL语句也会分为三个阶段:预处理阶段、优化阶段、执行阶段

预处理阶段:在这个阶段做的事情,比如去判断表和字段是否存在,将sql语句中的*替换成全部字段

优化阶段:这个阶段是优化器去选择最优执行sql语句的方案,比如在出现多个索引的时候,选择走哪个索引

执行阶段:执行器和搜索引擎交互,调用函数去调用搜索引擎的查询接口。有三种执行方式,主键索引查询、全表扫描和索引下推。

其中索引下推是在5.6版本之后出现的。举个例子说明一下索引下推。

select * from tab where age > 20 and salary= 10000;假定age和salary组成了联合索引。如果没有索引下推,那么在age是会走索引的,而salary则不走。那么执行的流程是,搜素引擎找到第一条age>20的记录后,进行回表操作,将该记录返回到server端去判断是否salary=10000。而索引下推则是,在搜素引擎找到第一条age>20的记录后,先不进行回表操作,而是在搜索引擎判断salary=10000,然后再返回server端判断其它条件(这里没有)是否成立。

Mysql 文章被收录于专栏

本专栏是本人学习mysql的一些总结,也欢迎大家评论区留言讨论交流~

全部评论
哥,还有吗,多发点
点赞
送花
回复
分享
发布于 01-16 21:37 湖北

相关推荐

2 10 评论
分享
牛客网
牛客企业服务