一条sql语句是如何执行的(大体方向)

大体来说 数据库分为server层和引擎层

 

server层主要负责处理sql语句 包含很多 连接器 查询缓存 分析器 优化器执行器 选择索引触发器

数据库多个引擎公用server层 所以所有夸数据引擎的功能都在这一层 比如存储过程 触发器视图等..

引擎层是接口的处理 提供读写

1 连接器 : 校验账号密码是否错误 账户有那些权限

1.1 查询缓存: sql语句会用key:value 形式存储缓存当中 key是sql语句 value是值 如果存在则直接返回否则进入分析器(

不建议使用缓存如果条数过大每次更新sql语句那庞大的缓存也会更新一次 所以在8.0默认取消了缓存功能)

2 分析器

如果没有查到缓存则开始执行sql语言

分析器会先做 语法分析 会从你输入的一段字符串当中 判断出 select 是查询, T为表名, id是id等

如果你输入错误就会得到一个非常常见的语法错误提示

You have an error in your SQL syntax

这层也会判断你所需要的字段是否存在如果不存在在这层就直接返回 存在则进入优化器

3 优化器

优化器会选择合理的sql执行顺序 比如你jion AB A取出a.xx= 10 B取 b.xx=20 这时候他会分析 是先去A表里拿或者去B表里拿等等 索引选择 有没有可能选错也是在这一层 一切准备就绪进执行器

4 执行器

首先会判断 这个账户有没有这个表权限如果有则根据表的引擎去调用引擎提供的接口

没有则返回

假设现在是InnoDB innodb会调用接口判断第一行是不是为结果如果不是则继续调取直到查到结果或数据的最后一行返回数据(这也是我们在where 时候有时候查到为空的时候的原因, 也是为何会返回空数据) 最终返回给客户端

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值