【MySQL】SQL语句执行流程

目录

一、连接器 

二、 查缓存

三、分析器

四、优化器

五、执行器


一、连接器 

学习 MySQL 的过程中,除了安装,我们要做的第一步就是连接上 MySQL

在一开始我们都是先使用命令行连接 MySQL

mysql -h localhost -u root -p 你的密码

 使用这个命令连接到数据库上,首先到达的就是连接器

连接器负责的职责就是跟客户端建立连接、获取权限、维持和管理连接 

当我们使用以上命令连接到 MySQL 服务端时,服务端会对密码、用户名进行验证(MySQL 默认的数据库中的 user 表中有用户信息)

如果输入的用户名密码不正确,服务端则会返回 “Access denied for user” 

反之,则会得到以下结果:

此时的连接器会到权限表中查询你的权限信息,之后你所进行的所有操作,都将依赖与此时读取到的权限信息 

二、 查缓存

建立完连接之后,你就可以在数据库中执行各种操作了(权限范围内)

此时如果你执行的是 select 语句,则会查询缓存,如果缓存中有该语句的执行结果,则会直接返回(之前执行过的 select 语句及其结果是以 key-value 的形式缓存在内存中)

但是大多数情况下是不建议使用缓存的!!!

缓存的失效非常频繁,每次对一个表进行更新操作,这个表上的查询缓存就会直接被清空 

但是 MySQL 也提供了 “按需使用” 的方式,可以将参数 query_cache_type 设置为 OFF,关闭查询缓存;也可以是用 SQL_CACHE 显式指定:

mysql> select SQL_CACHE * from user where id = 1

需要注意的是,MySQL 5.7 版本开始默认关闭了查询缓存,因为它的性能问题和维护成本较高。在 MySQL 8.0 版本中,查询缓存被彻底移除。 

三、分析器

到了这一步,MySQL 需要知道你要做什么操作,因此需要对你的 sql 语句进行解析

分析器首先做的就是 “词法分析” 。此时 MySQL 就会识别你的 sql 语句中的字符串分别是什么?代表的是什么?

识别完之后,就会进行 “语法分析”。根据词法分析的结果,语法分析器会根据语法规则判断你的 sql 语句是否满足 MySQL 的语法

如果语法存在错误,则会报错:

出现语法错误在提示内容中就会提示第一个出现错误的内容。

四、优化器

分析器分析完以后,语法没有存在错误,则会到达优化器。

在这里,MySQL 在知道你要执行的操作了,但是在真正开始执行这些操作之前,还需要经过优化器的处理。

优化器会在表中有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

同样的 sql 语句,如果表连接的顺序的不一致,最终的执行效率也会大不相同,而优化器的作用就是决定使用哪一种顺序方案。

 优化器优化完成后,此时才会真正执行 sql 语句

五、执行器

开始执行时,需要判断你是否有 sql 语句中的表的操作权限,如果没有,这是就会提示没有权限的错误。

如果有权限,就打开表继续执行。打开表时优化器会根据表的引擎定义去使用这个引擎提供的接口

慢查询日志有一个 rows_examined 字段,该字段表示语句执行过程中一共扫描了多少行。

在执行器每次调用引擎获取数据时累加的,但有时候执行器执行一次,引擎扫描了多行,所以两者之间并不是完全关联的 

一  叶  知  秋,奥  妙  玄  心 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qx_java_1024

祝老板生意兴隆,财源广进!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值