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'
這個(gè)子查詢是非相關(guān)子查詢,我們能和外層循環(huán)獨(dú)立的執(zhí)行它,materialization的思路正是如此,用大城市的City.country域填充臨時(shí)表,然后讓臨時(shí)表和歐洲countries執(zhí)行join操作
這個(gè)join 可以通過兩個(gè)方向完成:
從materialized表到歐洲的國(guó)家
從歐洲國(guó)家到materialized表
第一種涉及到掃描materialized 表,所以我們叫它“materialized scan”
如果你執(zhí)行從國(guó)家表到materialized表的join,最高效的方式是查找匹配的行通過主鍵查找,(materialized表有主鍵,我們用來刪除重復(fù)),由于此,我們稱起為“materialized 查找”
從explain 輸出:
我們可以印證我們剛才的描述,先產(chǎn)生臨時(shí)表,然后臨時(shí)表和外表執(zhí)行join操作。由于臨時(shí)表 的type 是all,那么這是一個(gè)“materialized scan”。
總結(jié)
以上是生活随笔為你收集整理的mysql semi join_MySQL 5.6 Semi join优化之materialization strategy的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gearman mysql编译_gear
- 下一篇: mysql innodb 索引 延迟更新