MySQL 连接状态
1 查看所有客户端的连接状态
show processlist;
输出结果:
+----+------+-----------------+-------+---------+------+----------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------------+-------+---------+------+----------+------------------+ | 9 | root | localhost:49386 | NULL | Sleep | 37 | | NULL | | 10 | root | localhost:49391 | test | Sleep | 22 | | NULL | | 11 | root | localhost:49396 | test | Sleep | 31 | | NULL | | 12 | root | localhost:49401 | sonar | Sleep | 28 | | NULL | | 13 | root | localhost:49414 | test | Sleep | 21 | | NULL | | 14 | root | localhost:49432 | test | Query | 0 | starting | show processlist | +----+------+-----------------+-------+---------+------+----------+------------------+
2 断开客户端连接
kill 12; -- 12为连接的id
3 连接线程的command
Sleep 等待刻划断的查询
Query 正在执行查询
Locked 等待表锁的释放
Sorting result 正在对结果排序
Sending data 正在发挥数据
MySQL的查询过程
1 mysql的架构图:

2 mysql的查询流程图

3 mysql的查询流程
1 接收查询sql
2 查询缓存,如果未命中,则会继续进行下一步
3 解析器(parser)解析sql语句,生成解析树
4 预处理器进行预处理,检查数据表和数据列是否存在,解析名字和别名等
5 查询优化器()进行优化处理,生成最优的执行计划
6 调用存储引擎进行查询
7 返回结果(生成第一条查询结果时就开始逐步返回,所以服务器不需要暂存结果)
mysql缓存
- 开启缓存 my.ini 文件中修改:
query_cache_type=ON
query_cache_size=1024
- 由于mysql的缓存时基于表的,所以表中的数据有任何更新,就会使缓存失效
mysql执行计划的type(访问类型)
system:
const:根据主键活唯一索引查询到一条数据
eq_ref:根据唯一索引访问
ref:根据非唯一索引访问
range:根据索引访问一定的范围
index:根据索引访问全表
ALL:无索引访问全表
mysql慢查询日志
开启:修改my.ini中的以下配置
slow_query_log=ON
long_query_time=0.1
log_queries_not_using_index=ON