您好,登錄后才能下訂單哦!
本篇內容主要講解“為什么MySQL不推薦使用join”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“為什么MySQL不推薦使用join”吧!
1.對于mysql,不推薦使用子查詢和join是因為本身join的效率就是硬傷,一旦數據量很大效率就很難保證,強烈推薦分別根據索引單表取數據,然后在程序里面做join,merge數據。
2.子查詢就更別用了,效率太差,執行子查詢時,MYSQL需要創建臨時表,查詢完畢后再刪除這些臨時表,所以,子查詢的速度會受到一定的影響,這里多了一個創建和銷毀臨時表的過程。
3.如果是JOIN的話,它是走嵌套查詢的。小表驅動大表,且通過索引字段進行關聯。如果表記錄比較少的話,還是OK的。大的話業務邏輯中可以控制處理。
4.數據庫是最底層的,瓶頸往往是數據庫。建議數據庫只是作為數據store的工具,而不要添加業務上去。
讓緩存的效率更高。許多應用程序可以方便地緩存單表查詢對應的結果對象。如果關聯中的某個表發生了變化,那么就無法使用查詢緩存了,而拆分后,如果某個表很少改變,那么基于該表的查詢就可以重復利用查詢緩存結果了。
1.DB承擔的業務壓力大,能減少負擔就減少。當表處于百萬級別后,join導致性能下降;
2.分布式的分庫分表。這種時候是不建議跨庫join的。目前mysql的分布式中間件,跨庫join表現不良。
3.修改表的schema,單表查詢的修改比較容易,join寫的sql語句要修改,不容易發現,成本比較大,當系統比較大時,不好維護。
四、不使用join的解決方案
在業務層,單表查詢出數據后,作為條件給下一個單表查詢。也就是子查詢。會擔心子查詢出來的結果集太多。mysql對in的數量沒有限制,但是mysql限制整條sql語句的大小。
通過調整參數max_allowed_packet ,可以修改一條sql的最大值。建議在業務上做好處理,限制一次查詢出來的結果集是能接受的。
關聯查詢的好處是可以做分頁,可以用副表的字段做查詢條件,在查詢的時候,將副表匹配到的字段作為結果集,用主表去in它。
但是問題來了,如果匹配到的數據量太大就不行了,也會導致返回的分頁記錄跟實際的不一樣,解決的方法可以交給前端,一次性查詢,讓前端分批顯示就可以了,這種解決方案的前提是數據量不太,因為sql本身長度有限
到此,相信大家對“為什么MySQL不推薦使用join”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。