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.