1、连接器
连接器负责跟客户端建立连接,获取权限、维持和管理连接
- – 用户名密码验证
- – 查询权限信息,分配对应的权限
- – 可以使用show processlist查看现在的连接
--查询连接数量
mysql> show processlist;
+----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 407387 | Waiting on empty queue | NULL |
| 18 | root | localhost:13165 | db01 | Sleep | 58004 | | NULL |
| 19 | root | localhost:13204 | db01 | Sleep | 58004 | | NULL |
| 28 | root | localhost:12078 | NULL | Query | 0 | starting | show processlist |
+----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
4 rows in set (0.04 sec)
mysql>
- – 如果太长时间没有动静,就会自动断开,通过wait_timeout控制,默认8小时
连接可以分为两类:
- – 长连接:推荐使用,但是要周期性的断开长连接
- – 短链接:
2、查询缓存
当执行查询语句的时候,会先去查询缓存中查看结果,之前执行 过的sql语句及其结果可能以key-value的形式存储在缓存中,如 果能找到则直接返回,如果找不到,就继续执行后续的阶段。
▪ 但是,不推荐使用查询缓存:
- – 1、查询缓存的失效比较频繁,只要表更新,缓存就会清空
- – 2、缓存对应新更新的数据命中率比较低
3、分析器
词法分析:Mysql需要把输入的字符串进行识别每个部分代表什 么意思
- – 把字符串 T 识别成 表名 T
- – 把字符串 ID 识别成 列ID
▪ 语法分析:
- 根据语法规则判断这个sql语句是否满足mysql的语法,如果不符 合就会报错“You have an error in your
SQL synta”
4、优化器
在具体执行SQL语句之前,要先经过优化器的处理
- – 当表中有多个索引的时候,决定用哪个索引
- – 当sql语句需要做多表关联的时候,决定表的连接顺序
不同的执行方式对SQL语句的执行效率影响很大
- – RBO:基于规则的优化
- – CBO:基于成本的优化
5、执行器
开始正式执行SQL语句之前,要先进行用户权限验证(如果是在查询缓存中直接返回,则是在返回结果时做权限验证)。