mysql查询语句的执行流程

Mysql整理记录Day1

假设现在有一张简单的表,只有id一个字段,执行以下语句:

selct * from T where id=10;

现在我们来探索下,这条语句的执行都经历了哪些步骤 mysql逻辑架构图

连接器

mysql -h$ip -P$port -uroot -p123456

第一步连接数据库,连接器负责跟客户端建立连接、获取权限、管理连接。其中:mysql是客户端工具,用来和服务端建立连接。连接需要Tcp三次握手,握手成功后,连接器开始验证身份。如果通过验证,连接器回到权限表中查询你拥有的权限。

分析器

连接成功后,mysql需要分析语句,知道你要执行什么操作。

优化器

在表里有多个索引的时候,决定使用哪个索引;或者再多表关联(join)的时候确定表的连接顺序。

执行器

开始执行前,会先判断你是否有权限执行该语句,没有会返回没有权限错误;如果有权限,调用引擎接口执行。

执行流程

id没有索引:

  1. 调用InnoDB引擎接口,取到表T的第一行,判断id是否等于10,如果不是则跳过,如果是将该行记录加入到结果集。
  2. 取下一行,重复判断,直到取到最后一行
  3. 返回结果集,执行结束

如果id上有索引,执行逻辑大同小异,第一次调用“取满足条件的第一行”,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎定义好的。

笔记参考于极客时间《MySQL实战45讲》

经验分享 程序员 微信小程序 职场和发展