【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;
  

输出:

  

1
2
3
4
5

6
idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEsNULLALLNULLNULLNULLNULL7100.00NULL

1 row in set, 1 warning (0.00 sec)
  

  

官方:

1
2
3
4
5
6
7
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 类型。
栗子:

1
explain select s.* from student s where s.id = 1
输出:

1
2
3
4

5
idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEsNULLconstPRIMARYPRIMARY8const1100.00NULL

  

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值