(图片修正:从mysql8.0开始,删除了查询结果缓存的功能,所以可以忽视掉图中的查询缓存节点)
mysql可以分为server层和存储引擎层这两层:
a.server层实现的跨存储引擎的逻辑性的功能,涵盖mysql的大多数核心功能,也包括mysql的内置函数(日期,时间,数学,加密等函数);
b.而引擎层则是具体提供数据的存储和查询接口,架构是插件式的,mysql可以选用具体的存储引擎如:InnoDB,MyISAM,从mysql5.5.5版本开始默认的引擎是InnoDB
server层介绍
连接器
连接器—>分析器—>优化器—>执行器
连接器负责与客户端建立连接、获取权限、维持和管理连接,客户端通过账号密码与数据库进行连接,连接成功后读取权限表中的该用户权限,意味着连接时对权限的修改并不影响该连接的权限;
连接建立之后如果没有下一步的动作,该连接会处于空闲状态,超过一定的时间会断开连接,这个时间的长度由参数wait_timeout控制,默认值是8小时;
连接分为长连接和短连接,连接的建立很复杂,建议使用长连接,长连接有一个弊端是mysql执行过程中临时使用的内存是管理在连接里的,只有连接断开后才会释放资源,所以在进行一些比较大的操作之后,mysql的cpu占用可能会比较高,长期积累下来内存占用过高的话可能被系统杀掉。建议在进行大操作之后执行 mysql_reset_connection 来重新初始化连接资源,这个操作不需要重连和重新验证权限;
分析器
连接器—>分析器—>优化器—>执行器
分析器主要是做两方面的工作,词法分析和语法分析,词法分析主要是识别语句中的每个字符串具体代表的是什么含义,语法分析是在词法分析后的基础上,判断语句是否符合mysql的语法规则。
例如:select * from T where ID=10,首先会识别select出来知道是一个查询语句,将“T”识别为表名,将“ID”识别为列名;
优化器
连接器—>分析器—>优化器—>执行器
经过分析器之后mysql已经知道了你想要做什么,在执行具体语句之前,可以有多种不同的执行策略,此时需要优化器来进行决定,比如有多个索引时选择哪个索引,多表联查的时候决定联表的顺序。
执行器
连接器—>分析器—>优化器—>执行器
开始执行之前先验证权限,然后打开表,利用引擎提供的接口执行操作。