当前位置: 首页 > news >正文

SQL语句的执行流程

文章目录

  • 一、执行流程
  • 二、建立连接
  • 三、预处理器
  • 四、解析器
    • 4.1 词法分析
    • 4.2 语法分析
    • 4.3 语义分析
  • 五、优化器
  • 六、执行器
  • 七、返回结果


一、执行流程

阶段主要功能关键组件
1. 建立连接身份验证、权限检查连接器
2. 预处理器缓存检查、SQL预处理查询缓存
3. 解析器词法分析、语法分析、语义检查解析器
4. 优化器生成最优执行计划查询优化器
5. 执行器按计划执行查询执行引擎
6. 返回数据结果返回、资源清理结果处理器

二、建立连接

当应用程序需要执行SQL语句时,首先需要与数据库服务器建立连接:

# 建立MySQL连接
mysql -h localhost -u username -p database_name

连接阶段的主要工作:身份验证和分配连接资源。


三、预处理器

预处理器主要负责SQL语句的预处理工作:

  • 在MySQL 8.0之前的版本中,预处理器首先检查查询缓存。
  • 读取到这条SQL语句的基本信息。
  • 去除注释和多余空格,大小写标准化。

四、解析器

分析器负责对SQL语句进行全面的分析和检查:

4.1 词法分析

将SQL语句分解为一系列的标记:

SELECT name, age FROM users WHERE age > 18;

词法分析结果:

标记类型说明
SELECT关键字SQL关键字
name标识符字段名
,分隔符逗号分隔符
age标识符字段名
FROM关键字SQL关键字
users标识符表名
WHERE关键字SQL关键字
>操作符比较操作符
18数值常量整数字面量

4.2 语法分析

根据SQL语法规则构建抽象语法树(AST):

          SELECT/      \字段列表      FROM子句/    \          |name   age     users表|WHERE子句|条件表达式/    |    \age    >     18

4.3 语义分析

进行语义层面的检查和验证:

  1. 表存在性检查:查询表信息是回去数据库查询是否有这个表。
  2. 字段存在性检查:查询字段信息是回去数据库表查询是否有这个字段。
  3. 权限检查:设计表或数据库的删除要检查当前用户的权限。
  4. 约束检查:查询表的主外键、不为空、唯一等约束条件。

五、优化器

选择代价最小的执行计划,从而提高 SQL 执行效率,场见的优化场景如下:

  • 确定多表连接顺序
  • 是否使用索引?使用哪个索引?
  • 选择合适的执行算法(嵌套循环 / 哈希连接 / 排序 / 归并等)

示例SQL:

SELECT name FROM student WHERE age > 18;

执行器的执行过程可能如下:

  1. 使用 B+ 树索引快速定位满足 age > 18 的主键 ID;
  2. 根据主键回表获取 name 字段;
  3. 逐行拼装结果集并返回给客户端。

六、执行器

根据执行计划,具体执行 SQL。
步骤:

  1. 访问表、索引,执行 WHERE 条件过滤
  2. 做连接操作、聚合、排序等
  3. 将结果写入结果集返回客户端

七、返回结果

查询执行完成后,将结果返回给客户端。
比如下面的 SQL:

SELECT id, name FROM user LIMIT 2;

结果集在返回客户端前,格式如下:

+----+--------+
| id | name   |
+----+--------+
| 1  | Alice  |
| 2  | Bob    |
+----+--------+

相关文章:

  • 鼠标连点器 ,实现鼠标自动点击
  • 虚拟环境中的PyQt5 Pycharm设置参考
  • 使用YouDDNS-Docker为飞牛NAS配置YouDDNS动态域名解析
  • H3C-W2000-G2【透明代理模式】
  • 用wsl实现 kerberos 认证协议
  • 优启通添加自定义浏览器及EXLOAD使用技巧分享
  • vector中reserve导致的析构函数问题
  • 如何提高自己的实际操作技能以通过客运从业资格考试?
  • Python实现对大批量Word文档进行自动添加页码(16)
  • 一张纸决定的高度
  • DAY01:【ML 第二弹】高等数学
  • 初学c语言20(动态内存管理)
  • SYN Flood攻击:原理、危害与防御指南
  • 产品迭代与放弃的判断:MVP、PMF 与 Scale Fit 的三重验证
  • 开发者工具箱-鸿蒙金额转换开发笔记
  • (泛函分析)范数和收敛
  • LangChain
  • 讲述我的PLC自学之路 第九章
  • WHAT - 兆比特每秒 vs 兆字节每秒
  • 品鉴JS的魅力之防抖与节流【JS】
  • 做外贸需要关注国外哪些网站/品牌网络推广外包
  • 政务公开和网站建设工作问题/网络推广员的工作内容和步骤
  • 在百度上做网站推广效果怎么样/seo教程自学
  • 南通门户网站建设/天津百度seo
  • 网页制作与网站建设英文翻译/媒体资源
  • 宠物网站开发/淘宝关键词工具