一条SQL查询语句是如何执行的?

MySQL其实可以分为三层:第一层是服务层,就是通常我们看见的客户端;第二层是server层;第三层是存储引擎层。
server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有内置的函数(日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

存储引擎负责数据的存储和提取,架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎,MySQL5.6版本以后默认是 InnoDB。
blob.jpg

下面一次一次介绍一下server层中每一环节的功能。

连接器
负责跟客户端建立链接、获取权限、维持和管理链接。连接过程用到的技术是TCP连接。

查询缓存
MySQL拿到一个请求以后,会先到缓存中去查找,如果找到,直接返回结果;否则就执行后面的阶段。 数据在缓存中以 key-value的形式存在,key是查询语句,value是对应语句查询的结果。
建议:大多数时候不要使用缓存,因为对一个表的更新,就会导致查询缓存被清空。

分析器
这个Javac编译器中的词法分析器功能一样。缓存没有命中,就开始对SQL语句进行词法分析。做完词法分析以后,就要开始做语法分析。

优化器
经过分析器,MySQL就已经知道SQL语句真正想做什么,在开始执行之前,还需要优化器处理,这个阶段和Javac编译器中的语义分析器一样,主要都是在优化。

执行器
通过分析器和优化器,MySQL知道做什么和怎么做,就开始执行SQL语句。

存储引擎后面再单独写一篇。

1
说点什么

avatar
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
0 Comment authors
MySQL为什么可以回滚 | 苟日新,日日新,又日新 Recent comment authors
  Subscribe  
最新 最旧 得票最多
提醒
trackback

[…] 前面介绍了了一条SQL查询语句是如何执行的,其中查询语句经过连接器、分析器、优化器、执行器、搜索引擎完成一个全过程。那一条SQL更新语句是如何执行的呢?SQL更新语句比SQL查询过程多多涉及到两个日志模块:redo log(重做日志)和binlog(归档日志)。 […]

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部