sql执行过程

2020-10-28  本文已影响0人  dingking
image.png

执行过程

Mysql一般可以分为server层 存储引擎层。如下sql:

select * from test where id=1;

连接器

客户端进行登录连接,权限判断(如果修改了该用户权限,会在之后的连接生效,原先的链接不生效)
连接成功可以使用下列sql查看连接进程

show processlist;

在连接器长时间休眠,没有动静,连接器会主动端口,下次发起请求会出现(Lost connection to MySQL server during query),默认连接时间是8小时,控制参数是由参数 wait_timeout 控制的。
像我们一般开发后端都是保持连接,使用长连接,但是很多长连接可能发现mysql内存涨的很快,一直高位不下,

  1. 这时候要查看那个连接使用过段,进行重新初始化连接
  2. 使用MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection

查询缓存

查询缓存通过key(查询sql),value查询结果保存,如果查询不到则进入分析器后续操作。
在进行表更新时候,都会清空该表的缓存,如果更新频繁,缓存的命中率比较低,所以很多时候不建议开启缓存,不开启缓存可以将参数 query_cache_type 设置成 DEMAND,而mysql 8以后这块已经删除了。

分析器

进行sql的分析,分析语法是否合理,比如是否缺字段,进行什么操作,上面是‘select’说明是查询操作,还有可以分析表中是否含有某个字段,比如没有某个字段a,会在这里体现。

优化器

进行选择走哪个索引,连接查询的时候那个表先查询,以及查询的逻辑是怎么样。

执行器

判断是否有该表权限,进行调用存储引擎查询数据。结果回写缓存(一般不启用)

  1. 引擎扫描行数 执行器调用的次数
  2. rows_examined(慢sql查看) 执行sql过程是扫描数据行数总和

存储引擎

比如mysql 默认的myisam,以及现在默认用的innodb

上一篇 下一篇

猜你喜欢

热点阅读