mysql semi join_MySQL 5.6 Semi join优化之materialization strategy

8月 24, 2014 |

Nix.Huang

考虑如下查询:

select * from Country

where Country.code IN (select City.Country

from City

where City.Population > 7*1000*1000)

and Country.continent='Europe'

这个子查询是非相关子查询,我们能和外层循环独立的执行它,materialization的思路正是如此,用大城市的City.country域填充临时表,然后让临时表和欧洲countries执行join操作

4c6dfaab5382ae0205d168c8aa9dade1.png

这个join 可以通过两个方向完成:

从materialized表到欧洲的国家

从欧洲国家到materialized表

第一种涉及到扫描materialized 表,所以我们叫它“materialized scan”

如果你执行从国家表到materialized表的join,最高效的方式是查找匹配的行通过主键查找,(materialized表有主键,我们用来删除重复),由于此,我们称起为“materialized 查找”

从explain 输出:

d991305def7fd23eeacacab22ac52ea3.png

我们可以印证我们刚才的描述,先产生临时表,然后临时表和外表执行join操作。由于临时表 的type 是all,那么这是一个“materialized scan”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值