一.Mysql基本架构
SELECT
*
FROM
T
WHERE
ID = 10;
MySQL可以分为Server层和存储引擎层两部分
- server层包括连接器、查询缓存、分析器、执行器、内置函数(日期,时间,数字和加密函数等),所有的跨存储引擎的功能都在这一层实现,比如存储过程,触发器,视图等。
- 存储引擎层 负责数据的存储和提取:其架构模式是插件式的,支持InnoDB,MyISAM,Memory等多个存储引擎
- 最常用的引擎是InnoDB,从MySQL5.5.5版本开始默认存储引擎。
二.连接器
连接器负责与客户端建立连接,获取权限,维持和管理连接:
mysql -h$ip -P$port -u$user -p
- 用户名密码认证通过,连接器会到权限表里查出你拥有的权限
- 用户成功建立连接后,你用管理员账号对这个用户的权限做修改,也不会影响已存在连接的权限
- 当修改用户权限后,需要新建连接才会使用新的权限设置
数据库的长连接
- 长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接 (推荐)
- 短连接是指每次执行完很少的几次查询就断开连接,下次查询重新建立一个
长连接缺点
- 内存占用过大:Mysql执行过程中临时使用的内存管理在连接对象里面,这些资源会在断开连接以后才释放,所以长连接积累下来,导致内存占用太大,被系统强行(OOM)
长连接内存占用过大的解决方案
- 定期断开长连接
- 执行 mysql_reset_connection重新初始化连接资源
三.查询缓存
- MYSQL拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这个语句
- 查询信息会以key-value对的形式,直接缓存在内存中。
- key是查询语句,value是查询结果
- 语句不在缓存中,会继续后续执行将结果回写到查询缓存中
查询缓存往往弊大于利
- 查询缓存失效频繁,任何更新修改删除操作,都会 让查询缓存失效
- MySQL8.0版本以后就没有查询缓存了
四.分析器
五.优化器
- 优化器是在表里面有多个索引的时候,决定使用哪个索引
- 一个语句有多表关联(join)的时候决定各个表的连接顺序
SELECT
t1.*
FROM
t1
LEFT JOIN t2 ON t2.d = 20
WHERE
t1.c = 10
优化器会判断走不走索引,选择最快的执行方式
六.执行器
MySQL通过分析器知道你要做什么,通过优化器知道怎么做,进入执行器阶段,开始执行语句
执行步骤 1.权限验证-对该表是否有查询修改删除权限 2.调用存储引擎执行
|