目录
一、连接器
二、 查缓存
三、分析器
四、优化器
五、执行器
一、连接器
学习 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 字段,该字段表示语句执行过程中一共扫描了多少行。
在执行器每次调用引擎获取数据时累加的,但有时候执行器执行一次,引擎扫描了多行,所以两者之间并不是完全关联的
一 叶 知 秋,奥 妙 玄 心