执行过程
Mysql一般可以分为server层 存储引擎层。如下sql:
select * from test where id=1;
连接器
客户端进行登录连接,权限判断(如果修改了该用户权限,会在之后的连接生效,原先的链接不生效)
连接成功可以使用下列sql查看连接进程
show processlist;
在连接器长时间休眠,没有动静,连接器会主动端口,下次发起请求会出现(Lost connection to MySQL server during query),默认连接时间是8小时,控制参数是由参数 wait_timeout 控制的。
像我们一般开发后端都是保持连接,使用长连接,但是很多长连接可能发现mysql内存涨的很快,一直高位不下,
- 这时候要查看那个连接使用过段,进行重新初始化连接
- 使用MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection
查询缓存
查询缓存通过key(查询sql),value查询结果保存,如果查询不到则进入分析器后续操作。
在进行表更新时候,都会清空该表的缓存,如果更新频繁,缓存的命中率比较低,所以很多时候不建议开启缓存,不开启缓存可以将参数 query_cache_type 设置成 DEMAND,而mysql 8以后这块已经删除了。
分析器
进行sql的分析,分析语法是否合理,比如是否缺字段,进行什么操作,上面是‘select’说明是查询操作,还有可以分析表中是否含有某个字段,比如没有某个字段a,会在这里体现。
优化器
进行选择走哪个索引,连接查询的时候那个表先查询,以及查询的逻辑是怎么样。
执行器
判断是否有该表权限,进行调用存储引擎查询数据。结果回写缓存(一般不启用)
- 引擎扫描行数 执行器调用的次数
- rows_examined(慢sql查看) 执行sql过程是扫描数据行数总和
存储引擎
比如mysql 默认的myisam,以及现在默认用的innodb
网友评论