什么是 MySQL 执行计划?如何分析
如下图🔽:

MySQL 执行计划是指 MySQL 查询优化器生成的一份详细的查询执行计划,它展示了 MySQL 在执行查询时所采取的具体执行计划,包括表的访问顺序、数据读取方式、使用的索引、使用的排序方式等等。通过分析执行计划,可以帮助我们找出查询性能瓶颈所在,进而进行优化,提高查询效率。
要获取执行计划,可以在执行 SQL 语句时在前面添加 explain 关键字,例如🌰:
explain select * from table where id = 1;
这样,MySQL 会输出该查询语句的执行计划。 执行计划中的各个字段含义如下🔽:
- id:每个 Select 子句或者是一个操作符或者是一个查询语句【id不同,则越大越先执行,id相同则按照从上到下执行】。
- select_type:查询类型,表示查询的类型(简单查询、联合查询、子查询等等)【simple代表普通查询,primary代表主查询,即外部的查询,subquery代表子查询,union代表union之后的第二个往后的查询】。
- table:查询涉及的表。
- partitions:匹配的分区。
- type✨:访问类型,表示 MySQL 在表中找到所需行的方式【性能由高到低分别是NULL,system,const,eq_ref,ref,range,index,all】。
- possible_keys:表示查询可能使用到的索引。
- key✨:实际使用到的索引。
- key_len:使用的索引长度。
- ref:列与索引的比较。
- rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数。
- filtered:返回结果的行数占总行数的比例。
- Extra✨:包含 MySQL 解决查询的详细信息。
分析执行计划时,需要注意以下几个方面🔽:
- 扫描行数:rows 字段,表示查询所需扫描的行数,如果该值过大,说明查询效率不高,需要优化。
- 使用索引:key 字段,表示查询所使用的索引,如果没有使用索引或者使用的不是最优索引,需要考虑优化。
- 排序:Extra 字段,如果查询需要使用 filesort 排序,说明查询效率不高,需要优化。
- 嵌套循环:如果查询类型是 nested loop,说明查询中包含嵌套循环,也需要考虑优化。
通过分析执行计划,可以确定查询优化的方向和方法,提高查询效率。
【我们可以着重对key,type,extra进行分析,判断他有没有走索引,走的是哪一个索引,是否创建了中间表等等,然后具体sql具体修改】
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
