简述一条SQL是如何执行的

在我们平时的开发之中,SQL 是避免不了的,随着工作年限的增加熟练度也是成正比的,但是一条SQL是怎么执行的却又可能还不怎么清楚。

以MySQL为例大致可以分为七步:

一、查询缓存

当我们运行一条SQL语句的时候,首先会查询缓存中是否有数据(查询条件与上次完全一致),如果缓存中已经有了上次查询的数据就直接把缓存中的数据返回「8.0 取消了缓存机制」。如果不想让我们查询的数据存储到缓存的话,可以加上 SQL_NO_CACHE 来跳过缓存,如:select SQL_NO_CACHE * from table 。

二、解析器

当缓存中没有想要的数据时,就会查询数据库表中的数据。接下来就会对这条SQL进行语法解析,比如 有没有 select from 等关键字,以及关键字的位置 是否正确,简单来讲 就会按照SQL的语法要求就行解析,不符合的话就直接返回错误信息。符合的话就会生成语法树。

三、预处理器

符合SQL语法要求之后就会检查SQL中的列名、表名是否存在且正确,然后再进行权限验证,就是当前用户是否有权限对这个表进行相关的操作。

四、查询优化器

我们一般写SQL都是根据自己的习惯来书写,但是MySQL也许并不认为我们写的顺序(比如多个条件先执行哪一个)是最好的,执行最快的。所以它会根据自己的判断调整SQL 以达到他认为执行最快的顺序。当然如果使用STRAIGHT_JOIN 关联两张表,就会直接以前表为基表查询后面关联的表,不再做优化。

五、执行计划

查询优化器优化SQL之后就会生成执行计划

六、查询执行引擎

根据执行计划茶村数据

七、API查询接口

供执行引擎调用,查询表中的数据。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值