當前位置:成語大全網 - 新華字典 - 求MySQL 中JOIN 的詳細用法

求MySQL 中JOIN 的詳細用法

1. Nested-Loop Join 翻譯過來就是嵌套循環連接,簡稱 NLJ。

這種是 MySQL 裏最簡單、最容易理解的表關聯算法。

比如,拿語句 select * from p1 join p2 using(r1) 來說,

先從表 p1 裏拿出來壹條記錄 ROW1,完了再用 ROW1 遍歷表 p2 裏的每壹條記錄,並且字段 r1 來做匹配是否相同,以便輸出;再次循環剛才的過程,直到兩表的記錄數對比完成為止。

2. Block Nested-Loop Join ,塊嵌套循環,簡稱 BNLJ

那 BNLJ 比 NLJ 來說,中間多了壹塊 BUFFER 來緩存外表的對應記錄從而減少了外表的循環次數,也就減少了內表的匹配次數。還是那上面的例子來說,假設 join_buffer_size 剛好能容納外表的對應 JOIN KEY 記錄,那對表 p2 匹配次數就由 1000 次減少到 1 次,性能直接提升了 1000 倍。

3. 最近 MySQL 8.0.18 發布,終於推出了新的 JOIN 算法 — HASH JOIN。

MySQL 的 HASH JOIN 也是用了 JOIN BUFFER 來做緩存,但是和 BNLJ 不同的是,它在 JOIN BUFFER 中以外表為基礎建立壹張哈希表,內表通過哈希算法來跟哈希表進行匹配,hash join 也就是進壹步減少內表的匹配次數。當然官方並沒有說明詳細的算法描述,以上僅代表個人臆想。那還是針對以上的 SQL,我們來看下執行計劃。