共计 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.
弃用缓存次要起因:
- 对表中数据的任何一个更新,都会导致与该表无关的所有缓存生效,如果数据批改比拟频繁则会导致缓存性价比很低
- 查问必须 byte-for-byte 都雷同,也就是雷同的语句才会查问到缓存,
Query Cache
不会对查问做任何解析优化
语法分析
语法分析阶段次要有两个工作:
- 解析语句,把传入的
SQL
语句生成对应的外部数据结构(解析树) - 查看语句中的关键词,表,字段是否存在
优化器
当对应的 SQL
曾经转化为解析树后,就须要通过优化器进行优化,尽可能减少扫描的行数。当优化器阶段执行后,整个语句的执行计划就曾经确定下来
MySQL 优化器所做优化次要包含:
- 重写查问
- 决定表的读写程序
- 抉择适合的索引
执行器
MySQL 通过分析器晓得了你要做什么,通过优化器晓得了该怎么做,于是就进入了执行器阶段,开始执行语句。
首先会查看语句是否由执行权限,如果没有则会返回权限谬误
存储引擎只负责存储数据,执行器通过获取存储引擎的一行一行数据,来确定最终查问后果
为什么权限查看要放到执行阶段呢?
有些时候,SQL 语句要操作的表不只是 SQL 字面上那些。比方如果有个触发器,得在执行器阶段(过程中)能力确定。优化器阶段前是无能为力的
正文完