一、MySQL运行机制数据图
mysql运行机制图.jpg
二、运行机制解释
- 建立连接:通过客户端/服务器通信协议与MySQL建立连接。MySQL客户端与服务端的通信方式是“半双工”通信。每一个MySQL连接,时刻都有一个线程状态来标识这个连接正在做什么。
通信机制:
● 全双工:能同时发送和接收数据;
● 半双工:某一时刻,要么接收数据,要么发送数据,不能同时进行;
● 单工:只能接收或者发送数据。 - 查询缓存:这是MySQL查询中可优化的一个地方,如果开启了查询缓存且在查询缓存过程中查询到完全相同的sql语句,则将结果直接返回给客户端;如果没有开启查询缓存或者没有查询到完全相同的语句,则由解析器进行语法语义解析,并生成“解析树”。
- 解析器:将客户端发送的sql进行语法解析,生成“解析树”。预处理器会根据一些MySQL规则进一步检查“解析树”是否合法,最后生成新的“解析树”。
- 查询优化器:根据“解析树”生成最优的执行计划。可分为两类:静态优化(编译时优化)、动态优化(运行时优化)。
eg:
● 等价变换策略
1=1 and a>1 改成 a>1
a<b and a=1 改成 b>1 and a=1
基于联合索引,调整条件位置等。
● 优化count、min、max等函数
InnoDB引擎min函数只需要找索引最左边
InnoDB引擎max函数只需要找索引最右边
MyISAM引擎count(*),不需要计算,直接返回
● 提前终止查询
使用了limit查询,获取limit所需数据后,就不再继续遍历
● in的优化
MySQL会对in查询,先进行排序,再用二分法查找数据。比如where id in (2,1,3) 变成 in (1,2,3) - 查询执行引擎:负责执行sql语句,会根据sql语句中表的存储引擎类型,以及对应的API接口与底层存储引擎缓存或物理文件交互,得到查询结果并返回给客户端。若开启查询缓存,此时会将查询结果与sql完整的保存到查询缓存中,以后有相同的查询就可以直接返回结果。