一、Mysql的逻辑架构图
大体上Mysql可分为Server层和存储引擎层两部分。
二、下面是各个组件的作用
show processlist
看到:mysql> show processlist; +----+------+----------------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+----------------+------+---------+------+-------+------------------+ | 3 | root | localhost:9885 | NULL | Query | 0 | NULL | show processlist | | 4 | root | localhost:9908 | NULL | Sleep | 46 | | NULL | +----+------+----------------+------+---------+------+-------+------------------+ 2 rows in set (0.00 sec)
其中的Command列显示为“Sleep”的这一行,就表示现在系统里面有一个空闲连接。
客户端如果长时间没活动,连接器就会将它自动断开,这个时间由wait_timeout控制的,默认值是8个小时。
查询缓存
连接建立完成后,执行查询语句,mysql会先在缓存中查找,之前执行过的语句及结果可能会在内存中以key-value对的形式缓存着,如果有则会直接返回结果。
缓存的弊端就是只要表更新过,那么关于这个表的所有缓存就会被清空,如果表更新的比较频繁,反而会增加数据库压力,需要注意的是,Mysql 8.0版本直接将查询缓存的整块功能删除掉了。
分析器
mysql 将查询语句分析识别,此时发现语法有误就会报错。
优化器
在真正的SQL执行之前,还要经过优化器,决定该查询使用哪个索引,或者决定表的连接顺序等等
执行器
开始执行前,先判断一下对这个表有没有查询的权限,然后才开始查询。
执行where条件查询时,如果该字段没有索引,就会逐条遍历。
---------------------------------------------------- 完----------------------------------------------------