一条SQL查询语句是如何执行的?


一条SQL查询语句是如何执行的?
本文插图
MySQL 都有哪些零件?

  1. 连接器:管理连接 , 权限验证 。
  2. 分析器:词法分析 , 语法分析 。
  3. 优化器:执行计划生成 , 索引选择 。
  4. 执行器:操作存储引擎 , 返回结果 。
  5. 存储引擎:存储数据 , 提供读写接口 。
连接器
第一步 , 我们会先连接到 MySQL 数据库 , 此时就是连接上连接器 。 连接器负责和客户建立连接 , 获取权限 , 维持和管理连接 。
mysql -h $ip -u root -p查询缓存
建立好连接之后 , 我们就可以使用 SELECT 语句了 , 执行逻辑就会来到第二步:查询缓存 。 MySQL 会现在查询缓存看看之前是不是执行过这条语句 , 如果有就直接返回 。 在 MySQL 8.0 之后 , 此模块已被移除 。
分析器
如果没有查询缓存 , 从这里 MySQL 就要开始分析我们要干什么 , 需要对我们编写 SQL 语句进行分析 。 分析器会先做词法分析 , 识别出字符串以及它代表的含义 。 然后再进行语法分析 , 判断我们编写的 SQL 语句有没有错误 , 如果有错误就会抛出错误 。
【一条SQL查询语句是如何执行的?】优化器
经过了分析器之后 , MySQL 知道你要干什么了 , 此时优化器会根据表结构以及语句目的来决定使用哪个方案 。
执行器
MySQL 通过分析器知道了我们要做什么 , 通过优化器知道了该怎么做效率最高 。 于是就可以进入执行器 , 真正执行 SQL 语句了 。
select * from users where name = ‘operator'假设 users 表中 , name 字段上没有建立索引 , 那么执行器调用 InnoDB 引擎接口取第一行 , 判断 name 是不是等于 operator , 如不是则跳过 , 如果是就放在结果集中 。 然后再调用引擎接口取下一行 , 重复相同的逻辑判断 , 直到取到这个表的最后一行 。 最后将结果集返回给客户端 。
作者:早已延伸链接:https://juejin.im/post/5efc46525188252e893a0581