Mysql45讲学习笔记-1
Mysql组成
server层:包括连接器、查询缓存、分析器、优化器、执行器。涵盖mysql的大多数核心服务功能以及所有的内置函数,所有的跨存储引擎的功能都在这一层实现,如:存储过程、触发器、视图等。
连接器:复杂数据库的连接和权限管理(仅在链接时进行权限校验,连接成功后权限变更对链接无影响)。
长连接:连接成功后,如果用户持续有请求,则一直使用相同的一个连接。
短连接:执行完相关sql后就断开连接,下一次操作再重新建立连接。
建立连接的过程通常比较复杂,应尽量减少建立连接的动作,尽量使用长连接。但是Mysql在执行过程中的临时内存都在连接对象里管理,只有连接断开时才会释放内存。因此长连接积累下来就会导致内存占用过大。
定期断开长连接。使用一段时间后,或者程序判断在执行过一次占用内存较大的查询后,主动断开连接。
Mysql5.7之后的版本,可以在每次执行一个比较大的操作后,主动执行mysql_reset_connection来重新初始化连接资源。
查询缓存:Mysql收到查询语句时,会先查询缓存,判断此命令之前是否执行过。之前执行过的语句及结果会以key-value的形式存储在查询缓存中。如果之前有执行过,则直接返回缓存的结果。但是查询失效非常频繁,只要对一个表有更新,这个表上的所有查询缓存都会清除。往往缓存结果存储后还没等到再次查询就因为有变更导致缓存清除了。因此只有极少改动的表才适合查询缓存。Mysql8.0之后删除了查询缓存的整个功能模块。
分析器:对输入的语句进行词法分析。根据词法分析的结果,语法分析器会根据语法规则判断sql语句是否满足Mysql要求,对异常预计会提示报错。
优化器:对输入的语句进行优化,提升执行性能。在表里有多个索引时且没有显示指定使用某个索引时,由优化器决定使用哪个索引;或者多表关联时,决定各个表的链接顺序。
执行器:首先进行权限校验,然后执行优化器优化后的语句。
存储引擎层:负责数据的存储和提取。架构模式为插件式,支持InnoDB、MyISAM、Memory等多种存储引擎。Mysql5.5.5之后默认InnoDB。在create table时可以通过engine = xxx来指定存储引擎。