Mysql整理记录Day1
假设现在有一张简单的表,只有id一个字段,执行以下语句:
selct * from T where id=10;
现在我们来探索下,这条语句的执行都经历了哪些步骤
mysql逻辑架构图
连接器
mysql -h$ip -P$port -uroot -p123456
第一步连接数据库,连接器负责跟客户端建立连接、获取权限、管理连接。其中:mysql是客户端工具,用来和服务端建立连接。连接需要Tcp三次握手,握手成功后,连接器开始验证身份。如果通过验证,连接器回到权限表中查询你拥有的权限。
分析器
连接成功后,mysql需要分析语句,知道你要执行什么操作。
优化器
在表里有多个索引的时候,决定使用哪个索引;或者再多表关联(join)的时候确定表的连接顺序。
执行器
开始执行前,会先判断你是否有权限执行该语句,没有会返回没有权限错误;如果有权限,调用引擎接口执行。
执行流程
id没有索引:
- 调用InnoDB引擎接口,取到表T的第一行,判断id是否等于10,如果不是则跳过,如果是将该行记录加入到结果集。
- 取下一行,重复判断,直到取到最后一行
- 返回结果集,执行结束
如果id上有索引,执行逻辑大同小异,第一次调用“取满足条件的第一行”,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎定义好的。
笔记参考于极客时间《MySQL实战45讲》