mysql5.7基於塊的嵌套循環連接(Block Nested-Loop Join)


mysql5.7基於塊的嵌套循環連接(Block Nested-Loop Join)

select * from t_order t1,t_order_detail t2 where t1.id = t2.order_id and t1.amount > 100;

這里t1是驅動表,t2是被驅動表,當t1一行記錄對應t2的3行記錄時,t2表就需要循環3次,當t1表有N行記錄時,t2表就需要循環 N*3次,這種性能是比較低的。

 所以mysql就想出了嵌套循環連接的方法,為SQL開辟了一塊內存,專門為t2表的一行記錄重復使用多次,以匹配已經從t1表查詢出來的值。

 

mysql中專門為join buffer設置了一個變量,單位是字節:

show variables like 'join_buffer_size';  -- 默認262144字節

    262144 bytes

= 256 kb

= 0.25 mb

mysql執行的時候,join buffer只放驅動表,不放被驅動表。

 

end.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM