mysql查詢結果合并,mysql一張大表?
rows代表這個步驟相對上一步結果的每一行需要掃描的行數,可以看到這個sql需要掃描的行數為35773*8134,非常大的一個數字。本來c和h表的記錄條數分別為40000+和10000+,這幾乎是兩個表做笛卡爾積的開銷了(select * from c,h)。
于是我上網查了下MySQL實現join的原理,原來MySQL內部采用了一種叫做 nested loop join的算法。Nested Loop Join 實際上就是通過驅動表的結果集作為循環基礎數據,然后一條一條的通過該結果集中的數據作為過濾條件到下一個表中查詢數據,然后合并結果。如果還有第三個參與 Join,則再通過前兩個表的 Join 結果集作為循環基礎數據,再一次通過循環查詢條件到第三個表中查詢數據,如此往復,基本上MySQL采用的是最容易理解的算法來實現join。所以驅動表的選擇非常重要,驅動表的數據小可以顯著降低掃描的行數。