MySQL的JOIN原理
表連接算法
Nested Loop Join(NLJ)算法:
首先介紹一種基礎(chǔ)算法:NLJ,嵌套循環(huán)算法。循環(huán)外層是驅(qū)動(dòng)表,循壞內(nèi)層是被驅(qū)動(dòng)表。驅(qū)動(dòng)表會(huì)驅(qū)動(dòng)被驅(qū)動(dòng)表進(jìn)行連接操作。首先驅(qū)動(dòng)表找到第一條記錄,然后從頭掃描被驅(qū)動(dòng)表,逐一查找與驅(qū)動(dòng)表第一條記錄匹配的記錄然后連接起來形成結(jié)果表中的一條記。被驅(qū)動(dòng)表查找完后,再從驅(qū)動(dòng)表中取出第二個(gè)記錄,然后從頭掃描被驅(qū)動(dòng)表,逐一查找與驅(qū)動(dòng)表第二條記錄匹配的記錄,連接起來形成結(jié)果表中的一條記錄。重復(fù)上述操作,直到驅(qū)動(dòng)表的全部記錄都處理完畢為止。這就是嵌套循環(huán)連接算法的基本思想,偽代碼如下。
首先加載t1,然后從t1中取出第一條記錄,之后加載t2表,與t2表中的記錄逐個(gè)匹配,連接匹配的記錄。
Block Nested Loop Join(BNLJ)算法:
再介紹一種高級(jí)算法:BNLJ,塊嵌套循環(huán)算法,可以看作對(duì)NLJ的優(yōu)化。大致思想就是建立一個(gè)緩存區(qū),一次從驅(qū)動(dòng)表中取多條記錄,然后掃描被驅(qū)動(dòng)表,被驅(qū)動(dòng)表的每一條記錄都嘗試與緩沖區(qū)中的多條記錄匹配,如果匹配則連接并加入結(jié)果集。緩沖區(qū)越大,驅(qū)動(dòng)表一次取出的記錄就越多。這個(gè)算法的優(yōu)化思路就是減少內(nèi)循環(huán)的次數(shù)從而提高表連接效率。
總結(jié)
以上是生活随笔為你收集整理的MySQL的JOIN原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 8系列之重新认识HashMap
- 下一篇: 第一次用access的数据库是连接字符串