开发者

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

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

        一、执行android流程

        阶段主要功能关键组件
        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标识符字段名
        ,分隔符www.devze.com号分隔符
        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   |python
        +----+--------+
        | 1  | Alice  |
        | 2  | Bob    |
        +----+--------+

        到此这篇关于SQL语句的执行流程的文章就介绍到这了,更多相关SQL语句的执行流程内容请搜索编程客栈(www.devze.com)以前的文章或继php续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新数据库

        数据库排行榜