大家好,我是 Snow Hide,作为《MySQL 实战》这个专栏的学员之一,这是我打卡的第 1 天,也是我第 37 次进行打卡这种操作。
今天我温习了该专栏里一篇叫《基础架构:一条SQL查询语句是如何执行的?》的文章。
关键词总结:Server 层(连接器、查询缓存、分析器、优化器、执行器、内置函数(日期、时间、数学、加密函数)、跨存储引擎功能(存储过程、触发器、视图))、存储引擎层(存储、提取、InnoDB)。
所学总结:
Server 层
连接器
负责与客户端建立连接、获取权限、维持以及管理连接。
通过 mysql 客户端根据连接的过程:
- 如果用户名/密码不正确,客户端将收到错误信息 “Access denied for user” 并退出;
- 如果用户名/密码正确,连接器会通过权限表来关联用户的权限,并只让用户进行他权限范围内的操作。
对连接中的用户进行权限的变更不会使其立即生效,需要用户重新连接后才会生效。
查询缓存
查询缓存的失效非常频繁,只要表被更新,表上面所有的查询缓存都会被清空。不经常更改的表才适合使用查询缓存,例如系统配置表。MySQL 8.0 之后没有查询缓存这个模块了。
分析器
分析器会先做 “词法分析”。用户输入的是由多个字符串以及空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。
优化器
优化器是当表有多个索引时,决定使用哪个索引;或在多表关联语句时,决定表的连接顺序。
执行器
开始执行的时候,片段用户对操作表是否有对应操作类型的权限,没有则返回权限错误消息。如果有权限则打开表,执行器根据表的引擎使用相关引擎所提供的接口。
末了
重新总结了一下文中提到的内容:MySQL 逻辑架构、SQL 语句完整执行流程。