关于mysql:MySQL-SQL执行流程

37次阅读

共计 907 个字符,预计需要花费 3 分钟才能阅读完成。

SQL 执行流程

连接器

能够通过下边命令连贯到 MySQL 服务中

mysql -h$ip -P$port -u$user -p$password

当连贯胜利后如不执行 SQL,连贯会进入 Sleep 状态,能够通过 show processlist; 查问到以后所有连贯

如果连贯太长时间(由 wait_timeout 管制,单位为秒)没有执行工作,则会被断开连接,能够通过 show variables like 'wait_timeout'; 查看默认工夫

当用户连贯胜利后,权限就确定下来。即便批改权限,依然须要下次从新连贯能力失效

查问缓存(Query Cache)

因为缓存效率不高,在 MySQL8(MySQL 官网阐明)中曾经被删除

Although MySQL Query Cache was meant to improve performance, it has serious scalability issues and it can easily become a severe bottleneck.

弃用缓存次要起因:

  1. 对表中数据的任何一个更新,都会导致与该表无关的所有缓存生效,如果数据批改比拟频繁则会导致缓存性价比很低
  2. 查问必须 byte-for-byte 都雷同,也就是雷同的语句才会查问到缓存,Query Cache 不会对查问做任何解析优化

语法分析

语法分析阶段次要有两个工作:

  1. 解析语句,把传入的 SQL 语句生成对应的外部数据结构(解析树)
  2. 查看语句中的关键词,表,字段是否存在

优化器

当对应的 SQL 曾经转化为解析树后,就须要通过优化器进行优化,尽可能减少扫描的行数。当优化器阶段执行后,整个语句的执行计划就曾经确定下来

MySQL 优化器所做优化次要包含:

  1. 重写查问
  2. 决定表的读写程序
  3. 抉择适合的索引

执行器

MySQL 通过分析器晓得了你要做什么,通过优化器晓得了该怎么做,于是就进入了执行器阶段,开始执行语句。

首先会查看语句是否由执行权限,如果没有则会返回权限谬误

存储引擎只负责存储数据,执行器通过获取存储引擎的一行一行数据,来确定最终查问后果

为什么权限查看要放到执行阶段呢?

有些时候,SQL 语句要操作的表不只是 SQL 字面上那些。比方如果有个触发器,得在执行器阶段(过程中)能力确定。优化器阶段前是无能为力的

正文完
 0