Skip to the content.

MySQL工作流程

  1. MySQL支持不同语言连接,每一种语言提供一套连接接口,不同数据库根据接口实现自己的驱动.
  2. 之后假设通过TCP/IP连接到MySQL,由一个监听连接线程处理请求,然后从缓存线程中取出一个空闲线程处理这次请求,如果缓存线程池中没有线程就要新创建一个线程处理。
  3. 之后一条SQL过来,服务器首先检查查询缓存。查询缓存系统会跟踪查询中涉及的每个表,如果这些表发生了变化,那么和这个表相关的所有缓存数据均失效,MySQL将缓存放入一个表中,通过一个哈希值引用。当判断缓存是否命中时,MySQL不会进行解析查询语句,而是直接使用SQL语句和客户端发送过来的原始信息。任何字符上的不同都会导致缓存的不命中。当查询语句含有不确定数据时则不缓存。如果命中了缓存,则立刻返回存储在缓存中的结果,反之则进行下面的处理。
  4. 解析器通过关键字将SQL语句进行解析,并生成对应的解析树。
  5. 预处理器则根据一些MySQL规则进行进一步检查解析树是否合法。
  6. 查询优化器会将解析树转化成执行计划,并找到最好的执行计划。如果在一条SQL语句执行的过程中将该语句对应的最终执行计划进行缓存,当相似的语句再次被输入服务器时,可以直接使用已缓存的执行计划。
  7. 在解析和优化阶段,MySQL将生成查询对应的执行计划,MySQL的查询执行引擎根据这个执行计划来完成整个查询。
  8. Server层通过调用引擎的接口实现查询。
  9. 引擎层接收到请求之后开始处理查询返回数据。

总结自这篇文章