mysqld服务程序结构 || 当我们执行sql语句时,是怎么返回结果的?

mysqld服务程序主要包含Server层和引擎层。Server层的连接层负责验证用户合法性,提供SQL交互线程,SQL层则涉及语法检查、语义分析、权限验证、解析器、优化器和执行器等功能,用于处理SQL语句。引擎层根据SQL层的指令从磁盘获取和返回数据,同时涉及存储和binlog日志记录。
摘要由CSDN通过智能技术生成


mysqld服务程序结构

1、server层

连接层

  1. 验证用户的合法性(ip,端口,用户名,密码)
  2. 提供两种连接方式(socket,TCP/IP)
  3. 提供一个与SQL层交互的专用线程 (查看线程用show processlist;)

SQL层

  1. 接收连接层传来的SQL语句。

  2. 检查语法。

  3. 语义检查:判断SQL语句的类型

    ​ (1)DDL :数据定义语言
    ​ (2)DCL :数据控制语言
    ​ (3)DML :数据操作语言
    ​ (4)DQL: 数据查询语言

  4. 权限检查:用户对库和表有没有权限

  5. 解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案.

  6. 优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划,进行判断,选择最优的执行计划

  7. 执行器:根据最优执行计划,执行SQL语句,产生执行结果。

    ​ (1)提供跟存储引擎层交互的线程。
    ​ (2)接收返回数据,优化成表的形式返回SQL。

  8. 提供查询缓存(默认是没开启的),会使用redis等替代查询缓存功能(8.0取消,缓存机制比较low)

  9. 提供日志记录:binlog,默认是没开启的。


2、引擎层

  1. 负责根据SQL层执行的结果,从磁盘上拿相应的数据。
  2. 将16进制的磁盘数据,交由SQL结构化化成表格,
  3. 连接层的专用线程返回给用户。

总结

  1. 当我们想要执行sql语句的时候,我们首先要登陆进数据库,这个过程是连接层在工作,会验证用户的合法性,比如你登陆数据库的用户、ip、端口、密码是否正确,然后mysql有两种连接方式,socket和tcp/ip,看你是哪一种,最后提供一个与sql层交互的线程。

  2. 进入数据库,当我们使用sql语句查询的时候,sql层会判断你写的sql语句语法是否正确,检查sql语句是什么类型,检查用户对库表有没有权限。解析器会在sql语句执行前进行预处理,生成多种执行方案,优化器根据解析器得出的多种方案选择最优的执行计划,执行器根据最优计划执行sql语句(引擎层在工作),用表的形式产生结果,然后将数据存入缓存,记录binlog日志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值