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 演算法會一次將列從外部迴圈傳遞到內部迴圈,因此它通常會多次讀取在內部迴圈中處理的資料表。