1. Index Nested-Loop Join
概念解释:
假设有t1,t2两张表,在join连接的时候,t1表驱动t2表,t1走的全部扫描,t2表使用了索引,
则这个时候join就使用了“index nested-loop join”算法,简称:NLJ。
NLJ执行的流程如下:
Index Nested-Loop Join 算法的执行流程
2. Block Nested-Loop Join
基于上面t1表和t2表,join连接,t1表和t2表都没有命中索引,都是走的全部扫描。这个
时候Join使用的是“Block Nested-Loop Join”算法,简称:BNL。
BNL算法的流程如下:
Block Nested-Loop Join 算法的执行流程
在explain分析语句的时候,extra附加信息中会出现“Using join buffer (Block Nested Loop)”。
join_buffer是由参数join_buffer_size决定的。默认是256k。如果放不下表 t1
的所有数据话,策略很简单,就是分段放。
流程大概是:
取t1表的数据,放入join