MYSQL执行计划

MYSQL执行计划

explain关键字—查询执行计划

EXPLAIN 是 MySQL 中用于查看查询执行计划的关键字,通过执行 EXPLAIN 可以获取查询的执行计划信息

EXPLAIN SELECT * FROM `user` WHERE id IN (SELECT id FROM user_address WHERE address = "江苏南京浦口") ;

0001

执行计划详解

id-执行计划的ID,标识执行顺序

  • id 相同,执行顺序由上至下
  • id 不同,id 值越大优先级越高,越先被执行

select_type

查询的类型,主要是用于区分普通查询、联合查询、子查询等。

  • SIMPLE:简单的 select 查询,查询中不包含子查询或者 union
  • PRIMARY:查询中包含子部分,最外层查询则被标记为 primary
  • SUBQUERY:子查询
  • UNION:表示 union 中的第二个或后面的 select 语句
  • UNION RESULT:union 的结果
EXPLAIN
SELECT * FROM `user` WHERE id IN(1, 2)
UNION
SELECT * FROM `user` WHERE id IN(3, 4);

0002

table

表示查询操作涉及的表名。如果查询使用了别名,则显示别名

type [重要]

访问类型,SQL 查询优化中一个很重要的指标,结果值从好到坏依次是:system > const > eq_ref > ref > range > index > ALL。

  • system:系统表,少量数据,往往不需要进行磁盘IO
  • const:常量连接,通常是主键或唯一索引的等值查询
  • eq_ref:使用索引进行连接,且连接条件是唯一索引
  • ref:使用非唯一索引进行连接
  • range:范围扫描
  • index:索引树扫描
  • ALL:全表扫描(full table scan)

possible_keys

表示可能应用到查询中的索引列表,不一定实际使用到了所有的索引。

key

表示实际使用到的索引

key_len

表示索引使用的长度。如果使用了复合索引,该字段表示索引使用的总长度。

ref

表示对索引的哪个列进行了引用。常见的有列名、常量等。

rows

根据表统计信息或者索引选用情况,大致估算出找到所需的记录所需要读取的行数。

filtered

表示返回结果的行数占需读取行数的百分比, filtered 的值越大越好。

Extra

十分重要的额外信息。

  • Using filesort:MySQL 对数据使用一个外部的文件内容进行了排序,而不是按照表内的索引进行排序读取。
  • Using temporary:使用临时表保存中间结果,也就是说 MySQL 在对查询结果排序时使用了临时表,常见于order by 或 group by。
  • Using index:表示 SQL 操作中使用了覆盖索引(Covering Index),避免了访问表的数据行,效率高。
  • Using index condition:表示 SQL 操作命中了索引,但不是所有的列数据都在索引树上,还需要访问实际的行记录。
  • Using where:表示 SQL 操作使用了 where 过滤条件。
  • Select tables optimized away:基于索引优化 MIN/MAX 操作或者 MyISAM 存储引擎优化 COUNT(*) 操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即可完成优化。
  • Using join buffer (Block Nested Loop):表示 SQL 操作使用了关联查询或者子查询,且需要进行嵌套循环计算。

使用案例

/* 数据准备 */

const

explain select * from `user` where id=1;

0003

eq_ref

EXPLAIN SELECT * FROM `user`,`user_ex` WHERE `user`.id=`user_ex`.id;

0004

ref

EXPLAIN SELECT * FROM `user`,`user_ex` WHERE `user`.name=`user_ex`.name;

0005

改为普通非唯一(non unique)索引,就由 eq_ref 降级为了 ref。

index

explain SELECT count(*) from `user`;

0006

id 是主键,该 count 查询需要通过扫描索引上的全部数据来计数。

参考

MySQL 执行计划详解

MySQL-执行计划、explain关键字查询执行计划以及explain案例分析

posted @ 2024-05-14 22:42  7256  阅读(36)  评论(0)    收藏  举报