MySQL INNER JOIN演算法的效率分析
阿新 • • 發佈:2019-02-01
MySQL處理JOIN的方法如下:(摘自MySQL 5.1 參考手冊中文版)
假定我們有一個如下形式的表T1、T2、T3的聯接查詢:
|
這裡,P1(T1,T2)和P2(T3,T3)是一些聯接條件(表示式),其中P(t1,t2,t3)是表T1、T2、T3的列的一個條件。
巢狀環聯接演算法將按下面的方式執行該查詢:
|
符號t1||t2||t3表示“連線行t1、t2和t3的列組成的行”。
其實我覺得,完全可以把P(t1, t2, t3)拆到進入迴圈前就處理,像這樣(後來仔細看了文件,MySQL在內聯接的時候還是會優化成這樣的):
|
甚至更快的是把條件全部合併起來:
|
我寫了個程式,把方法一(MySQL的方法)和方法三的效率進行比較,明顯方法三要高。
|