1. MySQL基础架构解析

Mysql基础架构

mysql基础架构

img

MySQL主要分为Server层和存储引擎层两部分

  • Server层有连接器,分析器,优化器,执行器
  • 存储引擎层负责数据的存储和提取

Server层

连接器

负责跟客户端创建连接,获取权限,维持和管理连接

mysql -h$ip -P$port -u$user -p

mysql是客户端工具,用来跟服务端建立连接

mysql是客户端,mysqld是服务器程序,在计算机中,都是一个进程,Mysql服务器程序的进程称为MySQL数据库实例,简称数据库实例
每个进程都有唯一的编号,进程ID,英文是PID,MySQL服务器进程的默认名称就是mysqld,客户端进程的默认名称是mysql

查询缓存

不推荐使用,MySQL8.0之后整块删除掉

分析器

  • 词法分析

    SQL语句是多个字符串和空格组成的,就需要识别出来字符串是什么,代表什么

    select * from T where ID = 10;

    字符串”T“就识别成“表名T”,字符串”ID“就识别成“列ID”

  • 语法分析

    判断这个SQL语句是否满足MySQL语法

    常见错误

1. You have an error in you SQL syntax;check...
2. Unknown column 'k' in 'where clause'

优化器

  • 在表中有多个索引的时候,优化器来决定使用哪个索引
  • 有join关联查询的时候,决定表的连接顺序

执行器

会先判断对表T有没有执行查询的权限

打开表的时候,执行器根据表的引擎定义,调用引擎提供的接口

select * from T where id=10;
如果id上没有索引过程:
1.调用Innodb引擎接口取这个表的第一行,判断id是不是10,如果不是就跳过,如果是则将结果存在结果集中
2.调用引擎接口取下一行数据,重复上面的判断,一直取到这个表的最后一行
3.执行器将上述便利过程中满足条件的数据组成的记录集作为结果集返回给客户端
如果id上有索引
1.调用Innodb引擎接口取第一个满足id=10的第一行,之后循环取满足条件的下一行,直到结束

慢日志操作

show variables like "%query%";

image-20220125215114622

慢日志中的Rows_examined值

image-20220125220148954

Rows_examined是执行器每次请求引擎时的获取的行数总和,

有的场景,执行器调用一次,引擎内部则扫描了多行,因此引擎扫描行数和rows_examined的值并不完全相同

posted @ 2022-01-25 22:11  穆彪的Object  阅读(62)  评论(0)    收藏  举报