什么是 MySQL 执行计划?如何分析

如下图🔽:

MySQL 执行计划是指 MySQL 查询优化器生成的一份详细的查询执行计划,它展示了 MySQL 在执行查询时所采取的具体执行计划,包括表的访问顺序、数据读取方式、使用的索引、使用的排序方式等等。通过分析执行计划,可以帮助我们找出查询性能瓶颈所在,进而进行优化,提高查询效率。


要获取执行计划,可以在执行 SQL 语句时在前面添加 explain 关键字,例如🌰:

explain select * from table where id = 1;


这样,MySQL 会输出该查询语句的执行计划。 执行计划中的各个字段含义如下🔽:


  1. id:每个 Select 子句或者是一个操作符或者是一个查询语句【id不同,则越大越先执行,id相同则按照从上到下执行】。
  2. select_type:查询类型,表示查询的类型(简单查询、联合查询、子查询等等)【simple代表普通查询,primary代表主查询,即外部的查询,subquery代表子查询,union代表union之后的第二个往后的查询】。
  3. table:查询涉及的表。
  4. partitions:匹配的分区。
  5. type✨:访问类型,表示 MySQL 在表中找到所需行的方式【性能由高到低分别是NULL,system,const,eq_ref,ref,range,index,all】。
  6. possible_keys:表示查询可能使用到的索引。
  7. key✨:实际使用到的索引。
  8. key_len:使用的索引长度。
  9. ref:列与索引的比较。
  10. rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数。
  11. filtered:返回结果的行数占总行数的比例。
  12. Extra✨:包含 MySQL 解决查询的详细信息。


分析执行计划时,需要注意以下几个方面🔽:


  1. 扫描行数:rows 字段,表示查询所需扫描的行数,如果该值过大,说明查询效率不高,需要优化。
  2. 使用索引:key 字段,表示查询所使用的索引,如果没有使用索引或者使用的不是最优索引,需要考虑优化。
  3. 排序:Extra 字段,如果查询需要使用 filesort 排序,说明查询效率不高,需要优化。
  4. 嵌套循环:如果查询类型是 nested loop,说明查询中包含嵌套循环,也需要考虑优化。


通过分析执行计划,可以确定查询优化的方向和方法,提高查询效率。

【我们可以着重对key,type,extra进行分析,判断他有没有走索引,走的是哪一个索引,是否创建了中间表等等,然后具体sql具体修改】

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
聪
下载 APP