当前位置:   article > 正文

Mysql执行计划-看这一篇就够了

mysql执行计划

目录

1. 概述

2. 执行计划使用

2.1.执行计划详解

2.1.1. 执行计划-ID

 2.1.2.执行计划select_type

2.1.3.执行计划-table

2.1.4.执行计划-type

 2.1.5.执行计划possible_key和key

2.1.6.执行计划key_len

2.1.7.执行计划ref

2.1.8.执行计划rows

2.1.9.执行计划Extra


1. 概述

在平时的开发工作中,少不了数据库的使用,那么就会涉及到sql语句,如何知道sql语句执行的过程,以及sql语句执行的性能,通过执行计划模拟优化器执行sql进行分析

2. 执行计划使用

语法:EXPLAIN/DESC + SQL语句

例如:explain select * from user;

执行计划输出内容:

EXPLAIN SELECT * FROM test_tb1;

执行计划id、查询类型、查询表、分区,索引使用情况、表之间的引用等

2.1.执行计划详解

2.1.1. 执行计划-ID

select查询序列号,如果id相同,则从上到下顺序执行,如果不相同,序列号大的优先级比较高,先执行

ID相同:

EXPLAIN SELECT * FROM t1,t2,t3 WHERE t1.`id`=t2.`t1_id` AND t2.`id`=t3.`t2_id`;

 ID不同:

EXPLAIN SELECT t1.* FROM t1 WHERE t1.`id`=
    (SELECT t2.`t1_id` FROM t2 WHERE t2.`id`=
         (SELECT t3.`t2_id` FROM t3 WHERE t3.`id`=1));

 2.1.2.执行计划select_type

查询类型主要用来说明查询的类型:普通查询、联合查询、子查询等

序号select_type说明
1SIMPLE简单的查询,查询中不饱和子查询或者Union
2PRIMARY查询中包含任何复杂的子查询,最外层的查询类型为PRIMARY
3SUBQUERYSELECT或者where中包含子查询
4DERIVED在from中包含子查询被标记为DERIVED(衍生),Mysql会递归查询这些子查询,将查询结果放入临时表
5UNION第二个select中查询UNION,则被标记为UNION,如果UNION出现在from子查询中,最外层被标记为DERIVED
6       UNION RESULT从UNION表获取结果的select

SIMPLE举例:

sql语句:EXPLAIN SELECT * FROM t1;

PRIMARY、SUBQUERY举例:

sql语句: EXPLAIN SELECT id,(SELECT NAME FROM t2 WHERE t2.`id`=1) FROM t1;

2.1.3.执行计划-table

表示查询数据所在的表

2.1.4.执行计划-type

type代表访问类型,是判断sql执行性能比较关键的一个字段,性能从高到低依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

system:表示只有一条数据,类似于系统表,是const的一种特例

const:表示通过索引一次就查询到数据,比较块,用于primary key(主键)和unique唯一索引

eq_ref:用于“=”运算符比较的索引列

EXPLAIN SELECT * FROM t1,t2 WHERE t1.id = t2.id;

ref:非唯一索引扫描 

rang:检索给的范围的值,使用一个索引进行选择,where后面使用between、>、<、in等

EXPLAIN SELECT * FROM t1 WHERE id > 0;

 index:当前查询的结果全部为索引列,虽然也是全部扫描,但是只查询索引数据,没有之间查询数据

EXPLAIN SELECT id FROM t1 WHERE id > 0;

all:遍历全部查询

EXPLAIN SELECT * FROM t1;

 2.1.5.执行计划possible_key和key

possible_key:可能使用的索引

key:实际使用的索引,如果为null,表示没有用到索引

2.1.6.执行计划key_len

表示索引中使用的字节数,可以根据这个字段计算查询中索引使用的长度,长度越短越好。

2.1.7.执行计划ref

表示索引的哪一列被使用

根据ref可以看出test库的t1表的id索引被使用

2.1.8.执行计划rows

根据表统计信息和索引选用情况,大致计算出查询到所需数据需要查询的行数

2.1.9.执行计划Extra

using where:表示使用了where过滤

using index:表示使用了覆盖索引,避免使用表数据

using join buffer:表示使用了链接缓存

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号