mysql查询过程和执行计划

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2019/08/mysql-cha-xun.html

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的架构图:

mysql的架构图

2 mysql的查询流程图

mysql查询过程和执行计划插图(1)

3 mysql的查询流程

1 接收查询sql

2 查询缓存,如果未命中,则会继续进行下一步

3 解析器(parser)解析sql语句,生成解析树

4 预处理器进行预处理,检查数据表和数据列是否存在,解析名字和别名等

5 查询优化器()进行优化处理,生成最优的执行计划

6 调用存储引擎进行查询

7 返回结果(生成第一条查询结果时就开始逐步返回,所以服务器不需要暂存结果)

mysql缓存

  1. 开启缓存 my.ini 文件中修改:
    • query_cache_type=ON
    • query_cache_size=1024
  2. 由于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 

发表评论