MYSQL学习笔记(一、一条查询sql的执行流程)

mysql> select * from T where ID=10;

一、连接器
调用方通过mysql连接器与mysql客户端连接,连接器负责管理连接以及权限验证。
如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。该权限一直存在于当前连接中,直至连接断开,在本次连接中对当前登录用户权限修改也无法影响已经存在的连接。
二、缓存和分析器
由mysql分析器进行词法语法分析,语法错误将在该阶段抛出返回,在mysql8之前还会在分析器阶段前进行查询缓存操作,缓存以k-v数据接口存储,k为sql语句,v为查询结果。命中后将直接返回结果,但是由于命中率过低(每进行一次update将会把所有的缓存remove),mysql8将该步骤省去。
三、优化器
分析器进行分析无误后将由mysql优化器生成执行计划并选择索引,
四、执行器
执行器操作mysql存储引擎(myisam mysql5.5及以前/innoDB mysql5.6及以后默认存储引擎), 开始执行的时候,要先判断一下你对所操作表有没有执行查询的权限,如果没有,就会返回没有权限的错误,如果直接命中缓存也会在返回缓存结果之前查询是否有权限。

例:select * from T where ID=10;
1.调用InnoDB引擎接口取这个表的第一行,判断ID值是不是10,如果不是则跳过,如果是则将这行存在结果集中;
2.调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。
3.执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。
五、存储引擎
存储引擎负责存储数据及提供读写接口。

mysql 一次性执行insert mysql一次sql查询的执行流程_java