mysql 基本架构以及 sql 执行流程

本贴最后更新于 768 天前,其中的信息可能已经时移世易

1. Mysql 基本架构示意图

image.png

1.1 连接器

用户名密码登录成功后,连接器会到权限表里查询登录账户的权限,
再次修改权限只有新建的连接才会使用新权限

show processlist //查看所有连接

MySQL 在执行过程中临时使用的内存是管理在连接对象里面的,这些资源会在连接断开的时候才释放
如果内存占用太大,会被系统强行杀掉
解决方案:
1.定期断开链接,程序里判断下执行过一个占用大内存的查询后,断开链接再重连
2.mysql5.7 以后 ,可以执行 mysql_reset_connection 来初始化链接,恢复到刚刚创建连接的状态(此处存疑,有说此方法是 C 语言 API 调用)

2.查询缓存

拿到执行语句时,mysql 会去判断是否最近执行过,如果缓存缓存中有执行结果,直接返回(查询语句需保持一致性,且数据没有被修改过)
由于缓存失效性很强,故不推荐使用查询缓存,且 8.0 版本后无此功能
通过调整参数,可以按需使用,默认查询不适用缓存,指定查询使用

query_cache_type=demand  //设置按需加载
mysql> select SQL_CACHE * from T where ID=10;//使用查询缓存

3.分析器

分析器会对 sql 语句做解析
首先是词法分析,识别出字符串分别是什么,代表什么
其次是语法分析,判断是否满足 mysql 语法

4.优化器

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序

5. 执行器

首先校验下登录账户对表 T 是否具有查询的权限(优化器之前也会调用 precheck 验证权限),
其次执行器会调用存储引擎接口扫描接口,并做扫描行数累加(rows_examined)

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...