MySQL 8.4 Release Notes
10.2.1.7 嵌套循环连接算法
MySQL 使用嵌套循环算法或其变体来执行表之间的连接操作。
简单的嵌套循环连接(NLJ)算法会以循环读取第一个表中的行,一次一行地将每一行传递给一个嵌套的循环,该循环处理下一个要连接的表。这个过程重复执行,直到所有需要连接的表都被处理完毕。
假设使用简单的NLJ算法对三个表t1
、t2
和t3
进行连接操作,连接类型如下:
Table Join Type
t1 range
t2 ref
t3 ALL
如果使用简单的NLJ算法执行连接操作,它将按照以下方式处理:
for each row in t1 matching range {
for each row in t2 matching reference key {
for each row in t3 {
if row satisfies join conditions, send to client
}
}
}
由于NLJ算法会将行从外部循环传递给内部循环,因此在执行内部循环时,通常需要多次读取被处理的表。