Mysql-join原理
2020-12-08 本文已影响0人
麦大大吃不胖
by shihang.mai
mysql用了Nested-Loop Join
驱动表R,连接表S
1. Simple Nested-Loop Join
![](https://img.haomeiwen.com/i16110947/c34dbdf1529301e7.png)
表r的每行数据与s的全表做匹配,直到表r的数据全表扫描完,合并数据展示。
2. Index Nested-Loop Join
![](https://img.haomeiwen.com/i16110947/b713573003fcc033.png)
表r的每行数据去s的索引找,匹配到再根据s的id找s的数据,直到表r的数据全表扫描完,合并数据展示。因为走索引,不用做全s表匹配,速度快
3. Block Nested-Loop Join
![](https://img.haomeiwen.com/i16110947/21dff869d01627ec.png)
表r将所有join用到的连接列和查询的相关列都放到join buffer中,然后join buffer整个去匹配s表,这样可以减少对s表的访问。
4. mysql选择join优先级
Index Nested-Loop Join >Block Nested-Loop Join > Simple Nested-Loop Join