0%

MySQL 深入学习(一):一条 SQL 查询语句执行的流程

执行流程

图片

连接器

  1. 建立连接,完成 tcp 握手
  2. 完成权限验证,验证之后以后的所有的会话都基于建立会话时的权限,如果此时管理员修改了权限,已经建立的连接的权限不会修改
  3. 关闭连接,如果客户端太长时间没有交互,连接器就会关闭连接,默认为 8 小时。(由 wait_timeout 参数控制)
  4. MySQL 临时使用的内存是管理在连接对象里边的,在关闭连接时自动释放。如果长时间使用一个连接不进行释放可能会引起内存持续增加。

查询缓存

查询缓存会将查询结果缓存下来,如果有相同的查询语句会直接返回已经缓存的结果。一旦表有更新就会删除查询缓存。

建议不要用,MySQL 8 开始已经完全移除。

分析器

分析器会进行词法分析、语法分析,判断是否符合 MySQL 语法。如果发生错误,会返回“You have an error in your SQL sytanx”的错误提醒。

优化器

  1. 决定是否使用索引。
  2. 决定关联表时的执行顺序。

执行器

调用具体的存储引擎获取执行结果。