内容简介:其实一条SQL的查询语句的执行并不是很复杂!我们就从最简单的一条查询语句来入手分析这个问题。 比如一条
其实一条 SQL 的查询语句的执行并不是很复杂!
我们就从最简单的一条查询语句来入手分析这个问题。 比如一条 SELECT * FROM T WHERE ID=10; 这样的语句它的整个执行的流程是怎么样的呢?
上图就是 MySQL 的结构图,从结构上我们能看到MySQL的结构主要分为两层:
- server层 主要包括:连接器、查询缓存、分析器、优化器、执行器等
- 引擎层 引擎层主要是负责数据的存储和读取
连接器
连接器主要是负责连接MySQL客户端并获取权限以及维持连接状态。我们想要执行MySQL语句之前先要连接MySQL客户端,执行语句:
mysql -h $hostname -P $port -u $user -p 复制代码
执行上面语句的时候会出现以下两种情况:
ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: NO)
查询缓存
NOTEThe query cache is deprecated as of MySQL 5.7.20, and is removed in MySQL 8.0
查询缓存是指输入查询语句,MySQL会优先执行查询缓存,如果命中缓存则直接返回查询结果。在MySQL中对于每次查询的结果会有缓存,每次有对于数据库表结构或者数据的修改,缓存就会失效。如果没有命中缓存就会继续往下执行。 所以在大多数情况下缓存的命中率是很低的,除非是一张更新频率非常低的静态表,否则缓存的命中率会非常的低。MySQL官方也是在MySQL8.0中放弃了对于查询缓存的支持。所以在大多数情况下是不建议使用查询缓存的。 关于查询缓存的配置请参考官方文档操作: Query Cache Configuration
分析器
没有命中缓存,就要开始执行真正的执行语句了。分析器的工作主要是对输入的SQL语句做解析。 首先会做"词法分析",当你输入一窜SQL语句的时候,系统要先能识别T是一个表名,ID是字段名,WHERE和SELECT是一个MySQL的关键字...等。 做完了这些之后就会进行"语法分析",语法分析就是判断这些关键字是否合法,如果你输入的SQL语句语法不正确就是有提示,比如WHERE关键字少个W
SELECT * FROM T HERE ID = 10; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ID = 10' at line 1 复制代码
通过以上的输出,我们能看到语法的检测是在分析器阶段执行的,如果遇到syntax error,只需要关注 use near 关键字后面的部分。 ###优化器 优化器顾名思义就是对SQL语句做优化的步骤,那就有同学有问题了,SQL语句都写好了,MySQL系统还能对其做优化?答案是:当然能。
SELECT * FROM t1 JOIN t2 ON `id` WHERE t1.a = 10 AND t2.b = 20; 复制代码
上面是一条简单的SQL语句,系统的执行顺序可以如下:
- 可以先查询t1表中a字段等于10的数据,然后根据查询结果通过ID关联t2表,判断t2表中的b字段是否等于20。
- 也可以先查询t2表中b字段等于20的数据,然后根据插叙结果通过ID关联到t1表,判断t1表a字段是否等于10。
还有一些是关于数据库索引的优化,这个部分比较复杂,后面会单独讲到。
执行器
当前面几个步骤完成的时候就开始进入到执行器阶段,执行器首先会做权限校验,判断当前用户是否有该SQL语句的操作权限,如果没有则会报错。
DELETE FROM t; ERROR 1142 (42000): DELETE command denied to user 'test'@'localhost' for table 't' 复制代码
如果权限校验也通过就会真正的执行查询,查询是通过调用引擎提供的API。
引擎
引擎层是通过插件的形式存在的,存储引擎负责MySQL中数据的储存和提取。服务器通过API与储存引擎行进通信,这些API屏蔽了不同引擎之间的差异,使得引擎的差异对服务层没有影响。不同的数据存储引擎之间也是不通信的,互相之间不会影响。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JAVA 2核心技术 卷Ⅰ
[美] 霍斯特曼、[美] 科奈尔 / 叶乃文、邝劲筠 等 / 机械工业出版社 / 2006-5 / 88.00元
本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java2开发平台标准版J2SE5.0的基础知识,主要内容包括面各对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing UI工具箱进行图形用户界面设计,异常处理、流输入/输出和对象序列化、泛型程序设计等。 本书内容翔实、深入浅出,附有大量程序实例,极具实用价值,是Java初学者和Java程序员......一起来看看 《JAVA 2核心技术 卷Ⅰ》 这本书的介绍吧!