mysql優化之N+1問題


  在網上找了小馬哥視頻來學習了一下mysql的優化。准備寫些博客來做個總結,加深記憶。


 

什么是N+1問題

  A對象關聯B對象,A對象進行列表展示時需顯示B對象的關聯屬性,這樣需要先用一條sql將N個A對象查詢出來,再用N條sql將這些對象的關聯屬性查詢出來。違背了減少數據庫交互原則,影響性能。

解決方法

  方法一:連接查詢,在查詢A對象的時候,將關聯的B對象查詢出來。缺點:1、連接的表增加,sql性能下降;2、如果N個A對象關聯的是同一個B對象,會使結果集非常龐大,返回結果集需要消耗性能,並且影響排序性能。比如100個employee都關聯dept id 1,本來dept的數據只需出現一次,這里為了避免N+1,重復出現100次。

  方法二:A表中設置冗余字段。缺點:更新B表需要更新A表。更新A表時需要增加修改B對象屬性的邏輯。

  方法三:性能最佳,1+1查詢。先用sql查出所有employee查詢出,將他們關聯的deptId放到一個set中,再發一條sql,deptid in set 將所有dept查出,之后在程序中將deptset 進入employee。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM