join有三种算法,分别是Nested Loop Join,Hash join,Sort Merge Join。
MySQL只支持Nested Loop Join这一种join algorithm
Nest Loop
SQL中的连接,本质上就是将两个数据集合依据连接条件进行匹配操作。Nest Loop Join就是通过两层循环手段进行依次的匹配操作,最后返回结果集合。SQL语句只是描述出希望连接的对象和规则,而执行计划和执行操作要切实将一行行的记录进行匹配。
nest loop是在驱动表中取出一条数据,然后从被驱动表中逐行比较,把符合规则的放入结果集中,然后再取下一行,依次循环,驱动表每返回一行,被驱动表就要扫描一次。
左连接左表不管有多大总是驱动表,右表总是被驱动表。
内连接,mysql的优化器会根据统计信息自动选择小表user_tmp做驱动表。