天天看点

【mysql】mysql 调优之 ——执行计划 explain

【mysql】mysql 调优之 ——执行计划 explain

1.what is explain(explain 是个什么东东)

explain(解释),在 Mysql 中 作为一个关键词,用来解释 Mysql 是如何执行语句,可以连接 select 、delete、insert、update 语句。

通常我们使用 explain 连接 一条 select 语句,查看运行状态,判断是否需要优化。

2.how to use explain(如何使用呢)

栗子:

1

explain select s.name,s.id,s.age,s.create_time from student s;

  

输出:

2

3

4

5

6
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
SIMPLE s NULL ALL 7 100.00

1 row in set, 1 warning (0.00 sec)

官方:

8

9

10

11

12

13

14

15

16

EXPLAIN [explain_type] explainable_stmt

explain_type: {

EXTENDED           

| PARTITIONS

| FORMAT = format_name

}

explainable_stmt: {

SELECT statement           

| DELETE statement

| INSERT statement

| REPLACE statement

| UPDATE statement

输出的列名:

id : select 标识符

select_type:select 类型

select_type 可选值 含义

SIMPLE 简单的 select,没有使用 UNION 或者 子查询

PRIMARY 最外一层的 select

UNION UNION 中第二个或者后面的 select 语句

DEPENDENT UNION UNION 中第二个或者后面的 select 语句,依赖于外层的 select

UNION RESULT UNION 的结果

SUBQUERY 子查询的第一个 select

DEPENDENT SUBQUERY 子查询的第一个 select,取决于外层的 select

DERIVED 派生表

MATERIALIZED Materialized subquery

UNCACHEABLE SUBQUERY 无法缓存结果的子查询,必须为外部查询的每一行重新计算其结果

UNCACHEABLE UNION UNION 查询中不可缓存的子查询中的第二个或者后一个 select

table:输出行对应的表

partitions:匹配的分区

type:join 类型

possible_keys:可选的索引

key:实际选择的索引

key_len:实际使用索引的长度

ref:与索引比较的列

rows:扫描行数的预估值

filtered:按表条件筛选的行的百分比

Extra:额外信息

3.重点关注的列

type 列

type 列描述了表的 join 类型,以下以 查询的最优到最差的排序列出了可能值:

system :当表只有一条数据(= system table)时,为 system 类型,是 const 类型的 特例。

const:当表最多只有一条数据相匹配时,为 const 类型。因为只有一行,所以优化器的其余部分可以将此行列中的值视为常量(constant)。const表非常快,因为它们只读一次。在使用 主键 或者 唯一索引 和常量比较时,即为 const 类型。

explain select s.* from student s where s.id = 1

const PRIMARY

eq_ref:通常出现在多表 join 查询,并且 关联的字段是 主键 或者 唯一非空索引,即后表 只能匹配一条数据。

ref:通常出现在多表 join 查询,关联使用了 最左前缀 或者 关联的是非主键 或者 非 唯一索引(也就是说,join 不能根据索引选择 单行数据)

fulltext:使用全文索引执行 join

ref_or_null:在 ref 的基础上 , 另外还搜索了包含空值的行

index_merge:

unique_subquery

index_subquery

range:

index:和 all 类似 ,只不过 扫描的是 索引树

all:全表扫描,效率最差,避免出现

原文地址

https://www.cnblogs.com/bg2015-07-05/p/10579695.html

继续阅读