执行流程
连接器
- 建立连接,完成 tcp 握手
- 完成权限验证,验证之后以后的所有的会话都基于建立会话时的权限,如果此时管理员修改了权限,已经建立的连接的权限不会修改
- 关闭连接,如果客户端太长时间没有交互,连接器就会关闭连接,默认为 8 小时。(由 wait_timeout 参数控制)
- MySQL 临时使用的内存是管理在连接对象里边的,在关闭连接时自动释放。如果长时间使用一个连接不进行释放可能会引起内存持续增加。
查询缓存
查询缓存会将查询结果缓存下来,如果有相同的查询语句会直接返回已经缓存的结果。一旦表有更新就会删除查询缓存。
建议不要用,MySQL 8 开始已经完全移除。
分析器
分析器会进行词法分析、语法分析,判断是否符合 MySQL 语法。如果发生错误,会返回“You have an error in your SQL sytanx”的错误提醒。
优化器
- 决定是否使用索引。
- 决定关联表时的执行顺序。
执行器
调用具体的存储引擎获取执行结果。