1. Mysql的基础架构
1.1. MySQL基础架构示意图
从上图上能够看出,mysql分为Server层和存储引擎两部分mysql
Server包括链接器、查询缓存、分析器、优化器、执行器等。以及全部的内置函数,还有存储过程、触发器视图等。sql
存储引擎负责数据的存储和提早。其架构模式是插件式,支持InnoDB、MyISAM、Memory等多个存储引擎。缓存
不一样的存储引擎公用一个server层。架构
1.2 server各个部分的做用
-
链接器函数
负责与客户端创建连接、获取权限、位置和管理连接优化
mysql -h$ip -P$port -u$user -p
用户成功链接以后,链接器会到权限表里面查出该用户所拥有的权限。以后该链接以内的权限判断都会依赖已经督导的权限。即:*若是修改已经链接的用户权限须要从新链接以后才能生效。插件
若是链接以后,客户端长时间没有操做,链接器会自动断开。这给时间是由参数wait_timeout控制的,默认时间为8小时。3d
mysql中长链接是指**链接成功以后,若是客户端持续有请求,则一直使用统一给链接。短连接则是指每次执行完不多的几回查询就断开链接,下次查询再从新创建一个。code
大量使用长链接,内存占用过大的问题解决办法:server
- 按期断开长链接、或者在执行一个占用较大内存查询以后,断开链接
- Mysql5.7 以后的版本,可使用
mysql_reset_connection
来从新初始化链接资源
-
查询缓存
mysql执行select以前,会先从查询缓存中判断是否执行过该sql
只要对一个表的更新,该表上的全部查询缓存都会被清空
若是有必要,能够经过显示的方式使用查询缓存
select sql_cache * from T where id = 1;
mysql8.0版将查询缓存删除了
-
分析器
主要是对输入的语句进行解析,并判断是否知足mysql的语法要求
-
优化器
优化器是在表中存在多个索引的时候,决定使用哪一个索引;或者一个语句有夺标关联的时候,决定各个表的链接数据顺序。
-
执行器
判断是否有权限对表的操做,若是有则调用引擎接口,进行数据处理。