MYSQL逻辑结构
-
客户端:这里指连接MySQL各种形式,如.Net中使用的ADO连接、Java使用JDBC连接等;MySQL是客户端和服务器模式,前提先建立连接,才能传输数据,处理相关逻辑;
-
业务逻辑:在MySQL内部有很多模块组成,分别处理相关业务逻辑;
连接管理:负责连接认证、连接数判断、连接池处理等业务逻辑处理;
查询缓存:当一个SQL进来时,如果开启查询缓存功能,MySQL会优先去查询缓存中检查是否有数据匹配,如果匹配上,就不会再去解析对应的SQL啦,但如果语句中有用户自定义函数、存储函数、用户变量、临时表、mysql库中的系统表时,都不会走缓存; 对于查询缓存来说,在MySQL8.0已经去除,官方回应的是在一定场景上,查询缓存会导致性能上的瓶颈。
解析器:对于一个SQL语句,MySql根据语法规则需要对其进行解析,并生成一个内部能识别的解析树;
优化器:负责对解析器得到的解析树进行优化,MySQL会根据内部算法找到一个MySQL认为最优的执行计划,后续就按照这个执行计划执行。所以后续我们分析的就是MySQL针对SQL语句选择出来的最优执行计划,结合业务,根据规则对SQL进行优化,从而让SQL语句在MySQL内部达到真正的最优。
执行器:得到执行计划之后,就会找到对应的存储引擎,根据执行计划给出的指令依次执行。
-
存储引擎:数据的存储和提取最后是靠存储引擎;MySQL内部实现可插拔式的存储引擎机制,不同的存储引擎执行不同的逻辑;
-
物理文件:数据存储的最终位置,即磁盘上;协同存储引擎对数据进行读写操作。
关于MySql的逻辑结构,以上只是简单描述,业务逻辑层的功能模块远不止上面提到的,小伙伴有兴趣可以专门研究一下,这里的目的就是为了体现SQL语句到服务器上时经过的几个关键步骤,方便后续优化的理解。
SQL语句的中关键字执行顺序须知
关键字简述:
- FROM:确定数据来源,即指定表;
- JOIN...ON:确定关联表和关联条件;
- WHERE:指定过滤条件,过滤出满足条件的数据;
- GROUP BY:按指定的字段对过滤后的数据进行分组;
- HAVING:对分组之后的数据指定过滤条件;
- SELECT:查找想要的字段数据;
- DISTINCT:针对查找出来的数据进行去重;
- ORDER BY:对去重后的数据指定字段进行排序;
- LIMIT:对去重后的数据限制获取到的条数,即分页;