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操作
這個join 可以通過兩個方向完成:
從materialized表到歐洲的國家
從歐洲國家到materialized表
第一種涉及到掃描materialized 表,所以我們叫它“materialized scan”
如果你執行從國家表到materialized表的join,最高效的方式是查找匹配的行通過主鍵查找,(materialized表有主鍵,我們用來刪除重復),由于此,我們稱起為“materialized 查找”
從explain 輸出:
我們可以印證我們剛才的描述,先產生臨時表,然后臨時表和外表執行join操作。由于臨時表 的type 是all,那么這是一個“materialized scan”。
總結
以上是生活随笔為你收集整理的mysql semi join_MySQL 5.6 Semi join优化之materialization strategy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gearman mysql编译_gear
- 下一篇: mysql innodb 索引 延迟更新