MySQL的逻辑架构图
如上图所示,MySQL可以分为Server层和存储引擎层两部分:
1)Server层涵盖了MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等;
2)存储引擎层负责数据的存储和提取,其架构是插件式的,支持InnoDB、MyISAM、Memory等多个。从MySQL5.5.5版本开始,InnoDB成为了默认的存储引擎。
下面来依次看一下Server层每个部分的功能:
1)连接器,负责跟客户端建立连接、获取权限、维持和管理连接。这里有个点需要注意:一个用户成功建立连接后,即使用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限,修改完成后,只有再新建的连接才会使用新的权限设置;
2)查询缓存,执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中,key是查询的语句,value是查询的结果。但是在大多数情况下都不建议使用查询缓存,因为弊大于利,原因是:查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。请注意:从8.0开始已经将查询缓存的整块功能删掉了;
3)分析器,先做“词法分析”,再做“语法分析”。词法分析就是将SQL语句中的select、update、delete等关键字以及表名、字段名准确的识别出来;语法分析就是要保证咱们输入的SQL语句满足MySQL语法;
4)优化器,主要功能是当表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序;
5)执行器,开始执行的时候,首先判断对这个表有没有权限,如果没有权限,就会返回没有权限的错误,如果有权限,就打开表继续执行。