MySQL45讲个人精简基础第一章

第一讲 基础架构

MySql分为Server层和存储引擎层两部分
在这里插入图片描述

连接器:管理权限,权限验证

查询缓存:命中就直接返回结果

分析器:词法分析,语法分析

优化器:执行计划生成,索引选择

执行器:操作引擎,返回结构

存储引擎层

连接器

连接命令:

mysql -h localhost -P port -u root -p

C:\Users\Ha>mysql -u root -p
Enter password: ****

用户名密码认证通过,连接器回到权限表查到权限。并且这次连接权限判断只依赖于这时读到的权限,修改权限表也改变不了已经建立的连接的权限

建立连接过程复杂,要尽量减少建立连接的动作,尽量使用长连接

MySQL执行过程中使用的内存管理在连接对象里面,这些资源会在连接断开才释放,所以长连接累积下来导致内存占用过大,被系统强行杀掉OOM,现象上看就是MySql异常重启

方案 1

​ 定期重连长连接,或者程序判断执行过一个占用内存的大查询后重连连接

方案2

​ MySql5.7以上的版本执行一个比较大的操作后通过执行mysql_reset_connection来重新初始化连接资源,不是重连,是恢复到刚创建完的状态,不用权限验证,

查询缓存

连接建立完,之前查询的语句和结果会KV形式存在内存中,如果有就直接返回,没有就继续执行,然后把查询结果变成缓存,类似于操作系统快表

不建议使用查询缓存,查询缓存弊大于利:——

​ 查询缓存失效频繁,对一个表更新,表的所有缓存会被清空。所以对更新压力大的数据库,查询缓存命中率很低,不随意变的表才需要查询缓存,类似redis

可以用SQL_CACHE显式指定查询缓存语句,但是MySQL8.0以后这个功能删除了

分析器

词法分析

通过关键字知道是CRUD哪一个语句,并且把字符名称赋予意义,比如T是表T的表名,U是列U的列名

语法分析

判断是否满足mysql语法,报错一般是 you have an error in your SQL synax;blablabla

优化器

表里有多个索引时优化器决定使用哪个索引,

一个语句多表join优化器决定各个表的连接顺序

执行器

判断对于表的权限(命中缓存的时候返回数据的时候检查权限(precheck))

查询也会在优化器之前检查权限

有权限再打开表继续执行

select * from T where ID = 10

执行器流程

上面语句当ID没有索引的时候

  1. 调用InnoDB引擎接口从第一行往下开始遍历比较ID,符合条件的加入结果集,最后返回给客户端

ID有索引的时候类似,是从符合条件的ID中遍历

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值