18人参与 • 2025-05-26 • MsSqlserver
阶段 | 主要功能 | 关键组件 |
---|---|---|
1. 建立连接 | 身份验证、权限检查 | 连接器 |
2. 预处理器 | 缓存检查、sql预处理 | 查询缓存 |
3. 解析器 | 词法分析、语法分析、语义检查 | 解析器 |
4. 优化器 | 生成最优执行计划 | 查询优化器 |
5. 执行器 | 按计划执行查询 | 执行引擎 |
6. 返回数据 | 结果返回、资源清理 | 结果处理器 |
当应用程序需要执行sql语句时,首先需要与数据库服务器建立连接:
# 建立mysql连接 mysql -h localhost -u username -p database_name
连接阶段的主要工作:身份验证和分配连接资源。
预处理器主要负责sql语句的预处理工作:
分析器负责对sql语句进行全面的分析和检查:
将sql语句分解为一系列的标记:
select name, age from users where age > 18;
词法分析结果:
标记 | 类型 | 说明 |
---|---|---|
select | 关键字 | sql关键字 |
name | 标识符 | 字段名 |
, | 分隔符 | 逗号分隔符 |
age | 标识符 | 字段名 |
from | 关键字 | sql关键字 |
users | 标识符 | 表名 |
where | 关键字 | sql关键字 |
> | 操作符 | 比较操作符 |
18 | 数值常量 | 整数字面量 |
根据sql语法规则构建抽象语法树(ast):
select / \ 字段列表 from子句 / \ | name age users表 | where子句 | 条件表达式 / | \ age > 18
进行语义层面的检查和验证:
选择代价最小的执行计划,从而提高 sql 执行效率,场见的优化场景如下:
示例sql:
select name from student where age > 18;
执行器的执行过程可能如下:
根据执行计划,具体执行 sql。
步骤:
查询执行完成后,将结果返回给客户端。
比如下面的 sql:
select id, name from user limit 2;
结果集在返回客户端前,格式如下:
+----+--------+ | id | name | +----+--------+ | 1 | alice | | 2 | bob | +----+--------+
到此这篇关于sql语句的执行流程的文章就介绍到这了,更多相关sql语句的执行流程内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论