|一条SQL查询语句是如何执行的?
本文插图
【|一条SQL查询语句是如何执行的?】
MySQL 都有哪些零件?
- 连接器:管理连接 , 权限验证 。
- 分析器:词法分析 , 语法分析 。
- 优化器:执行计划生成 , 索引选择 。
- 执行器:操作存储引擎 , 返回结果 。
- 存储引擎:存储数据 , 提供读写接口 。
第一步 , 我们会先连接到 MySQL 数据库 , 此时就是连接上连接器 。 连接器负责和客户建立连接 , 获取权限 , 维持和管理连接 。
mysql -h $ip -u root -p查询缓存
建立好连接之后 , 我们就可以使用 SELECT 语句了 , 执行逻辑就会来到第二步:查询缓存 。 MySQL 会现在查询缓存看看之前是不是执行过这条语句 , 如果有就直接返回 。 在 MySQL 8.0 之后 , 此模块已被移除 。
分析器
如果没有查询缓存 , 从这里 MySQL 就要开始分析我们要干什么 , 需要对我们编写 SQL 语句进行分析 。 分析器会先做词法分析 , 识别出字符串以及它代表的含义 。 然后再进行语法分析 , 判断我们编写的 SQL 语句有没有错误 , 如果有错误就会抛出错误 。
优化器
经过了分析器之后 , MySQL 知道你要干什么了 , 此时优化器会根据表结构以及语句目的来决定使用哪个方案 。
执行器
MySQL 通过分析器知道了我们要做什么 , 通过优化器知道了该怎么做效率最高 。 于是就可以进入执行器 , 真正执行 SQL 语句了 。
select * from users where name = ‘operator'假设 users 表中 , name 字段上没有建立索引 , 那么执行器调用 InnoDB 引擎接口取第一行 , 判断 name 是不是等于 operator , 如不是则跳过 , 如果是就放在结果集中 。 然后再调用引擎接口取下一行 , 重复相同的逻辑判断 , 直到取到这个表的最后一行 。 最后将结果集返回给客户端 。
作者:早已延伸链接:https://juejin.im/post/5efc46525188252e893a0581
推荐阅读
- 数据库|面试官:说说MySQL数据库分库分表,并且会有哪些问题?
- 美好未来已来|教你快速查询多个极兔快递单号的物流信息并筛选出所有未签收
- 互联网|一个SDK引发的“血案”
- 小记|MySQL集群数据问题修复小记
- 互联网|IT互联网行业如何规划职业发展?
- 苹果手机,IOS系统|苹果出新招!1500元新款iPhone将问世,国产机:放我们一条生路吧
- |MySQL使用基础,这么用就对了
- 中年|8.6M超轻量中英文OCR模型开源,训练部署一条龙 | Demo可玩
- 行业互联网,科创板|中芯国际:上市募集资金将重点投向中国大陆第一条14nm及以下先进工艺生产线
- 账户|史上最严重网络安全事故?奥巴马、拜登、马斯克等多名大V账户被盗,发了一条“诈骗”消息,网友评论亮了