網上有相關的文章,總結的挺好,這裏不再重複碼字,這裏提幾個點。
一,Block Nested-Loop join的理解
相對來說Block Nested-Loop join是最難理解的。
Block Nested-Loop join是如何批量操作的?
Block Nested-Loop join爲什麼能提升性能?
Block Nested-Loop join是使用了Buffer,就提高了性能,還是說批量操作有什麼特殊之處?
個人理解應該是:使用了Buffer,提高了性能。爲什麼這樣說呢?因爲驅動表的數據是逐行加載到內存的,如果把驅動表需要的數據提前加載到Buffer,相當於減少了很多次磁盤IO,這樣就顯著提高了性能。
也就是說這裏的批量操作,實際上指的是批量加載驅動表的數據到內存。
這個理解是個人觀點,如果有不對的地方,歡迎大家留言交流。
二,驅動表與非驅動表的概念
以table1 left join table2 爲例,哪個是驅動表?
答:table1是驅動表。table2爲非驅動表,或者叫匹配表。