一、MYSQL基础架构?
首先,我们得先了解MYSQL的基础架构,如下图所示:
从上图可以看出,MYSQL可以分为server层和存储引擎层。
server层包括连接器,查询缓存,分析器,优化器,执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
存储引擎层负责数据的存储和提取。其架构是插件模式的,支持InnoDB、MyISAM、Memory等多种存储引擎,现在最常用的是InnoDB存储引擎,从MYSQL5.5.5版本开始成为了默认存储引擎。
小知识点
指定存储引擎命令(比如在创建表的时候指定Memory存储引擎):engine=memory【在创建表的语句中加上这条命令即可】
二、架构详解
在这部分主要来了解server层和存储引擎层各个部分的作用:
- 连接器: 连接器负责跟客户端建立连接、获取权限、维持和管理连接
- 查询缓存: 如果命中缓存则直接返回结果
- 分析器: 对SQL进行词法分析、语法分析(知道该做什么)
- 优化器: 选择效率高的方案执行,选择索引(知道该怎么做)
- 执行器: 开始执行语句
- 存储引擎: 存储数据,提供读写接口
三、SQL语句执行过程
比如有这样一条语句:select * from T where id=10;
- ①客户端请求连接MYSQL数据库
- ②连接器负责跟客户端建立连接、获取权限以及维持和管理连接
- ③连接建立完成后,就会执行select语句了。MYSQL拿到一个查询请求后,会先到查询缓存中看看,如果该条语句能够直接在缓存中找到,则将结果直接返回给客户端。
- ④如果没有命中查询缓存,就要开始执行语句了。这个时候分析器就会做词法分析和语法分析,判断客户想要干什么
- ⑤知道了要干什么以后,就由优化器来确定怎么干,优化器会对执行的SQL语句选择一种最优的执行方法
- ⑥通过优化器知道了怎么做以后,执行器就开始执行语句,执行时会先看用户是否有执行权限,如果有权限,执行器就会根据表的引擎定义,去使用这个引擎提供的接口
- ⑦语句执行完了以后,就去引擎层获取数据返回(如果开启查询缓存的话就会缓存查询的语句及结果)
小知识点:
【什么是长连接?什么是短连接?】
数据库中,长连接是指客户和数据库连接成功后,如果客户端有持续请求,则一直使用同一个连接;短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个连接
小知识点:
【之前执行过的SQL语句及结果在查询缓存中如何存储?】
之前执行过的SQL语句以及结果在查询缓存中以key-value的形式缓存在内存中,key是查询的语句,value是查询的结果。
小知识点:
【为什么大多数情况下不建议使用查询缓存?】
因为查询缓存往往弊大于利。查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。对于更新压力较大的数据库来说,查询缓存的命中率会非常低。对于一张很长时间才会更新的表【比如说一个系统配置表】来说,对于它的查询才适合用查询缓存。
✨✨✨
加油!