一条查询sql执行流程

连接器

  我们和数据库进行交互的话,首先要进行连接。服务端校验账号密码无误后,就意味着一个用户成功建立连接,可以进行各种操作了。在连接的过程中,账号权限发生了改变也是感知不到的,必须重新连接才能获取账号最新权限。

缓存

  建立完连接后,现在执行select就来到了第二步:查询缓存,就是以sql为key,去内存中查询结果,如果能够在缓存中找到 value,就会直接返回给客户端。如果不在缓存中,就继续往后执行,然后将结果存在内存中。不过考虑到时效性,查询mysql缓存并不是一个比较好的方案,所以在mysql8.0+直接把 缓存模板 给删掉了。

解析器

  如果没有命中索引,就要开始真正执行语句了。首先会讲我们输入的字符串进行“词法解析” 识别出 表名和字段 ;然后进行 “语法分析” 看看是否符合sql语法规范。

优化器

  前面识别完语法后,现在mysql就要对你的sql进行预处理了,比如你的sql有多个索引,用哪个比较好;比如关联查询表的连接顺序、以哪个做驱动表比较好。

执行器

  现在离正真执行sql就差临门一脚了。他会判断你对表有没有操作权限。然后权限就直接返回异常提示;有权限就会交给引擎去执行了。

原文地址:https://www.cnblogs.com/wlwl/p/14975768.html