mysql left join優(yōu)化

原理

  • MySQL內(nèi)部采用了一種叫做 nested loop join的算法。Nested Loop Join 實(shí)際上就是通過驅(qū)動表的結(jié)果集作為循環(huán)基礎(chǔ)數(shù)據(jù),然后一條一條的通過該結(jié)果集中的數(shù)據(jù)作為過濾條件到下一個表中查詢數(shù)據(jù),然后合并結(jié)果。如果還有第三個參與 Join,則再通過前兩個表的 Join 結(jié)果集作為循環(huán)基礎(chǔ)數(shù)據(jù),再一次通過循環(huán)查詢條件到第三個表中查詢數(shù)據(jù)

優(yōu)化方案:

  • 如果可以的話,盡可能的使用join(inner join)替換left join
  • ON 后面的條件盡量加上索引
  • 條件中盡量能夠過濾一些行將驅(qū)動表變得小一點(diǎn),用小表去驅(qū)動大表
  • select a.*, b.* from A left join B ON A.b_id = B.id where B.type = '1'
    select a.*, b.* from A join B ON A.b_id = B.id and B.type = '1'的效率好像相差無幾
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容