【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程

SQL执行流程

  • 1. Mysql中的SQL执行流程
    • (1)查询缓存
    • (2)解析器
    • (3)优化器
    • (4)执行器
  • 2. Mysql8中SQL执行原理
    • 2.1 确认profiling是否开启
    • 2.2 多次执行相同SQL查询
    • 2.3 查看profiles
    • 2.4 查看profile
      • showProfile高级用法
  • 3. Mysql5.7中SQL执行原理
    • 1.配置文件中开启查询缓存
    • 2.重启mysql服务
    • 3.开启查询执行计划
    • 4.执行语句两次
      • 5.查看profiles
      • 6.查看profile
    • 2.4 SQL语法顺序

1. Mysql中的SQL执行流程

此图最好记住
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第1张图片

(1)查询缓存

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第2张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第3张图片

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第4张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第5张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第6张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第7张图片

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第8张图片

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第9张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第10张图片


(2)解析器

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第11张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第12张图片

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第13张图片

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第14张图片


(3)优化器

在这里插入图片描述

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第15张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第16张图片

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第17张图片


(4)执行器

在这里插入图片描述
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第18张图片
在这里插入图片描述
在这里插入图片描述
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第19张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第20张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第21张图片

2. Mysql8中SQL执行原理

https://www.bilibili.com/video/BV1iq4y1u7vj?p=111
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第22张图片

2.1 确认profiling是否开启

(1)开启profiling的作用

可以让Mysql收集 SQL执行过程使用的资源情况,从而了解查询语句底层执行过程

(2) 如何查看profiling有没有开启

mysql> select @@profiling;

mysql> show variables like 'profiling';

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第23张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第24张图片

2.2 多次执行相同SQL查询

select * from employees;

select * from employees;

2.3 查看profiles

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第25张图片
可以查看到当前session的sql执行记录;

2.4 查看profile

1.默认查看的是最后一条sql语句的执行过程;
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第26张图片
2.查看指定的sql语句

其中数字对应的是show profiles中的序号
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第27张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第28张图片
第六条和第七条sql是一模一样的,查看各自的profile也是一样的,说明再第二次执行sql查询的时候是没有走查询缓存;

showProfile高级用法

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第29张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第30张图片

8.0中查询如下语句:
在这里插入图片描述
没有查询缓存的,设置也没有意义;

5.7中查询:默认是关闭的
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第31张图片

3. Mysql5.7中SQL执行原理

1.配置文件中开启查询缓存

vim /etc/my.cnf

添加:

query_cache_type=1

2.重启mysql服务

systemctl restart mysqld

退出重新连接mysql;
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第32张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第33张图片

3.开启查询执行计划

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第34张图片

4.执行语句两次

select * from departments;

5.查看profiles

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第35张图片

6.查看profile

【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第36张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第37张图片
【Mysql】【高级篇】【第4章 Mysql逻辑架构】【02】SQL执行流程_第38张图片
查询缓存用的是字符串当做key,所以sql字符串只要不一样,都不可以命中缓存!

2.4 SQL语法顺序

你可能感兴趣的:(Mysql,mysql)