MySQL blocked nested loop join(bnl)和index nested loop join(inl)

blocked nested loop join使用了数组arr[join_buffer_size],如果外层小表数量把数组撑满了,然后到内层大表中全表扫描查询数据,把符合条件的数据保存下来,然后清空数组,再到外层小表中把数组撑满如此往复,直到小表没数据了,查询也就结束了,内层大表查询不用索引,也可以测试内层大表用了索引查询性能如何。

index nested loop join是外层小表查询一条数据,然后到内层大表中使用索引查询匹配的一条数据返回,然后循环下一个内层小表中的数据,如此往复,直到小表数据都查询结束,所以内层大表必须有索引,不然速度很慢。

原文地址:https://www.cnblogs.com/nizuimeiabc1/p/15693565.html