MySQL 8.4 版本注意事項
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 演算法會一次一個地將列從外部迴圈傳遞到內部迴圈,因此通常會多次讀取內部迴圈中處理的資料表。