您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關MySQL中如何進行nest loop且不考慮hash join,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
只考慮nest loop,不考慮hash join
條件如下:
a,b,c where a.id=b.id and a.id=c.id where a.name=’gaopeng’,b.name=’gaopeng’,c.name=’gaopeng’
假設a為驅動表,先連接b,再連接c ,且b,c表 id均有索引。
流程如下:
loop: 1、訪問驅動表a,過濾條件a.name='gaopeng',這個過程有索引用索引 獲得第一條數據記做row_a1,這里可能會匹配出多行數據,需要循環 loop: 2、訪問被驅動表b,連接條件a.id=b.id 相當于條件b.id = row_a1.id 這個過程b.id 有索引用索引,得到連接后的數據 a.\*+b.\*,這里可能 會匹配出多行數據,需要循環 3、每行數據,施加過濾條件b.name='gaopeng',假設 得到第一條數據記做row_b1 loop: 4、訪問被驅動表c,連接條件a.id=c.id 相當于條件c.id = row_b1.id 這個過程c.id 有索引用索引,得到連接后的數據 a.\*+b.\*+c.\*,這里可能 會匹配出多行數據,需要循環 5、每行數據,施加過濾條件c.name='gaopeng',假設 得到第一條數據記做row_c1
這里row_c1就是最終的第一條數據。其實就是3層嵌套循環的意思。
后面使用debug進行驗證。。
被驅動表全表掃描會使用A Block Nested-Loop (BNL) 代替A simple nested-loop join (NLJ) ,使用join buffer , 第1步 會一次讀取多行數據 假設讀取了row_an行 ,第2步 條件相當于 b.id in (row_a1.id,row_a2.id…row_an.id)這樣只會一次全表掃描了。。不然每條全表掃描更慢,及使用
上述就是小編為大家分享的MySQL中如何進行nest loop且不考慮hash join了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。