Mysql执行计划及索引下推ICP

一、EXPLAIN执行计划详解

字段说明

1.id

id列的编号是select的序列号,有几个select就有几个id,并且id的顺序是按select出现的顺序增长的。如果出现多表关联的情况,id = 1的表是驱动表。没有id的,代表中间的计算结果。

2.select_type

select_type是指查询类型,说明查询的种类。

2.1 simple简单查询

simple简单查询,查询不包含子查询和union。

explain select * from award where id = 2;
 2.2 复杂查询

对于复杂查询通常包含多种select_type。

explain select (select 1 from award where id = 1)
        from
        (select * from strategy_award where id = 1
        union
        select * from strategy_award where id = 1) der;

#查询执行流程

#执行派生表查询:

#从 strategy_award 表中查找 id = 1 的记录,两次。

#使用 UNION 合并结果,生成临时表 der。

#如果 id = 1 的记录存在,der 中会有一条记录;否则为空。

#执行最外层查询:

#对 der 中的每一行(最多一行),执行标量子查询 (SELECT 1 FROM award WHERE id = 1)。

#如果 award 表中存在 id = 1 的记录,返回 1;否则返回 NULL。

#返回结果:

#如果 der 中有记录,返回子查询的结果(1 或 NULL)。如果 der 为空,则整个查询结果为空。

 

 primary:复杂查询中最外层的select,derived:包含在from字句中的子查询。Mysql会将结果存放到一个临时表中,也称为派生表(derived的英文含义),union指定在union之后的第一个select,union result表示从union临时表检索结果的select,会产生临时表(没有索引)(union all 不进行去重)。subquery指包含在select中的子查询。

2.3 各项详解
含义
SIMPLE 不包含子查询或者UNION操作的查询(简单查询
PRIMARY 复杂查询中最外层的select,看到primary通常代表一个嵌套查询
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值