MySQL Nested Loop Join

Nested Loop Join分为 Index Nested Loop JOIN 和 Block Nested Loop Join两种 INJ全称Index Nested Loop JOIN   将 “驱动表/外部表” 的结果集作为循环基础数据,然后循环该结果集,每次获取一条数据作为下一个表的过滤条件查询数据,然后合并结果,获取结果集返回给客户端。Nested-Loop一次只将一行传入内层循环, 所以外层循环(的结果集)有多少行, 内层循环便要执行多少次,效率非常差。 一. 被驱动表有可用索引的情况: 如果内层循环(被驱动表)利用到了索引,可以视为一种新的算法Index Nested_Loop JOIN,简称为  INJ 。 示例(t1有100条记录,t2有1000条记录): 1. 执行select * from t1,查出表 t1 的所有数据,这里有 100 行; 2. 循环遍历这 100 行数据: 2.1 从每一行 R 取出字段 a 的值 $R.a; 2.2 执行select * from t2 where a=$R.a;需要检查t2中利用到了索引 2.3 把返回的结果和… Continue reading MySQL Nested Loop Join