1. 服务层
就是MySQL数据库提供的一些功能。
1.1. 连接层
负责管理我们的连接池以及连接相关的配置。
主要负责连接客户端,所以会有很多关于客户端的相关变量以及配置
变量:
当前线程的一些状态,
show status like "Threads%"
show FULL PROCESSLIST
字段 | 含义 |
user | 代表我连接到我的服务的用户信息 |
Host | 代表是从哪一个ip连接过来的 |
db | 连接的是哪个db |
command | 我去执行的一些命令,比如说我是做BinLog的同步,比如我是睡眠状态、还是查询状态 |
time | 执行指令维持的时间 |
state | 状态 |
max_connections 代表的是最大连接数,默认是151,超过这个连接数就不能连接了
1.2. 解析器
解析我们的sql语句,判断语句是否符合我们sql的语法以及后续的权限检测。主要保证拿到的sql语句是能在服务端执行的
词法解析:
我们的sql是一个一个简单的语句,我要知道这个语句是否正确,我需要一个一个的单纯去检查
语法解析:
就是解析语法树,看是不是符合语法树的结构,去校验这个表、表字段是否存在,以及接下来执行是否有相关权限。
1.3. 预处理
可以使用预处理来解决sql注入以及通过减少解析次数来提升性能。
适合的场景:
sql语句不变,但是我们的条件会随着用户的需要而变化
1.4. 优化器
觉得我的sql语句应该怎么样执行。
根据你电脑的cpu来决定你怎么优化,优化的方式有很多,可以自己去设置,像一些索引下推、子查询、链接管理
SELECT @@GLOBAL.optimizer_switch
1.5. 执行器
跟我们存储引擎交互,调用存储引擎的API得到用户想要的结果
2. 存储引擎层
存储引擎层属于mysql的一个插件,负责mysql是怎么存储和查询的。
InnoDB
Myisam ,更多的是只读的场景,或者读多的场景
memorv,我所有的数据保存在内存里,操作非常快,但是没法保证我数据的一个持久性。