IT俱乐部 MsSql SQL语句的执行流程语法分析

SQL语句的执行流程语法分析

一、执行流程

阶段 主要功能 关键组件
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 语义分析

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

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

五、优化器

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

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

示例SQL:

SELECT name FROM student WHERE age > 18;

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

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

六、执行器

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

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

七、返回结果

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

SELECT id, name FROM user LIMIT 2;

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

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

到此这篇关于SQL语句的执行流程的文章就介绍到这了,更多相关SQL语句的执行流程内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/database/mssql/16230.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部