假如在MySQL中有一个查询会话请求,那么大概流程如下:

(1)MySQL客户端对MySQLServer的监听端口发起请求。

(2)在连接者组件层创建连接、分配线程,并验证用户名、密码和库表权限。

(3)如果打开了query_cache,则检查之,有数据直接返回,没有继续往下执行。

(4)SQL接口组件接收SQL语句,将SQL语句分解成数据结构,并将这个结构传递到后续步骤中(将SQL语句解析成MySQL认识的语法)。

(5)查询优化器组件生成查询路径树,并选举一条最优的查询路径。

(6)调用存储引擎接口,打开表,执行查询,检查存储引擎缓存中是否有对应的缓存记录,如果没有就继续往下执行。

(7)到磁盘物理文件中寻找数据。

(8)当查询到所需要的数据之后,先写入存储引擎缓存中,如果打开了query_cache,也会同时写进去。

(9)返回数据给客户端。

(10)关闭表。

(11)关闭线程。

(12)关闭连接。