MySQL 9.0 发行说明
MySQL 使用嵌套循环算法或其变体来执行表之间的连接。
一个简单的嵌套循环连接 (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 算法一次将一行从外部循环传递到内部循环,因此它通常会多次读取在内部循环中处理的表。