MySQL多次單表查詢和多表聯合查詢


Tip:不建議執行三張表以上的多表聯合查詢
對數據量不大的應用來說,多表聯合查詢開發高效,但是多表聯合查詢在表數據量大,並且沒有索引的時候,如果進行笛卡兒積,那數據量會非常大,sql執行效率會非常低

多次單表查詢在service層進行合並好處:
1、緩存效率更高,許多應用程序可以方便地緩存單表查詢對應的結果對象。如果關聯中的某個表發生了變化,那么就無法使用查詢緩存了,而拆分后,如果某個表很少改變,那么基於該表的查詢就可以重復利用查詢緩存結果了。
2、多表信息聯合的列表頁面分頁顯示,只需要顯示一部分的數據,如果是多表聯合查詢那要把所有數據聯結查出來再執行limit,如果是多次單表查詢,先對單表進行篩選,先執行limit再與其余表去關聯,數據量會大大減小
3、如果數據庫沒有進行讀寫分離(主從備份),在並發量高的時候,由於寫表會加排他鎖,把多表聯合查詢改成單表查詢后鎖的粒度變小,減少了鎖的競爭
4、在數據量變大之后,普遍會采用分庫分表的方法來緩解數據庫的壓力,采用單表查詢比多表聯合查詢更容易進行分庫,不需要對sql語句進行大量的修改,更易擴展.分庫分表的中間件一般對跨庫join都支持不好
5、查詢本身效率也可能會有所提升。查詢 id 集的時候,使用 IN()代替關聯查詢,可以讓 MySQL 按照 ID 順序進行查詢,這可能比隨機的關聯要更高效。
6、業務高速增長時,數據庫作為最底層,最容易遇到瓶頸,單機數據庫計算資源很貴,數據庫同時要服務寫和讀,都需要消耗CPU,為了能讓數據庫的吞吐變得更高,
而業務又不在乎那幾百微妙到毫秒級的延時差距,業務會把更多計算放到service層做,畢竟計算資源很好水平擴展,數據庫很難啊,這是一種重業務,輕DB的架構
7、可以減少冗余記錄的查詢,在應用層做關聯查詢,意味着對於某條記錄應用只需要查詢一次,而在數據庫中做關聯查詢,則可能需要重復地訪問一部分數據。
更進一步,這樣做相當於在應用中實現了哈希關聯,而不是使用 MySQL 的嵌套循環關聯。某些場景哈希關聯的效率要高很多。

多次單表查詢在service層進行合並缺點:
1、需要進行多次的數據庫連接
2、代碼更復雜

總結:
個人覺得還是做多次單表查詢更好,更易擴展,當然數據量不大時,直接聯合查詢開發更方便


免責聲明!

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



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