最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談為什么MySQL不推薦使用子查詢和join

 更新時間:2021年03月17日 09:07:51   作者:浩宇天尚/Alex  
這篇文章主要介紹了淺談為什么MySQL不推薦使用子查詢和join,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

做分頁查詢:

1.對于mysql,不推薦使用子查詢和join是因為本身join的效率就是硬傷,一旦數據量很大效率就很難保證,強烈推薦分別根據索引單表取數據,然后在程序里面做join,merge數據。
2.子查詢就更別用了,效率太差,執(zhí)行子查詢時,MYSQL需要創(chuàng)建臨時表,查詢完畢后再刪除這些臨時表,所以,子查詢的速度會受到一定的影響,這里多了一個創(chuàng)建和銷毀臨時表的過程。
3.如果是JOIN的話,它是走嵌套查詢的。小表驅動大表,且通過索引字段進行關聯。如果表記錄比較少的話,還是OK的。大的話業(yè)務邏輯中可以控制處理。
4.數據庫是最底層的,瓶頸往往是數據庫。建議數據庫只是作為數據store的工具,而不要添加業(yè)務上去。

一、應用層關聯的優(yōu)勢

讓緩存的效率更高。許多應用程序可以方便地緩存單表查詢對應的結果對象。如果關聯中的某個表發(fā)生了變化,那么就無法使用查詢緩存了,而拆分后,如果某個表很少改變,那么基于該表的查詢就可以重復利用查詢緩存結果了。

將查詢分解后,執(zhí)行單個查詢可以減少鎖的競爭。

在應用層做關聯,可以更容易對數據庫進行拆分,更容易做到高性能和可擴展。

查詢本身效率也可能會有所提升。查詢id集的時候,使用IN()代替關聯查詢,可以讓MySQL按照ID順序進行查詢,這可能比隨機的關聯要更高效。

可以減少冗余記錄的查詢。在應用層做關聯查詢,意味著對于某條記錄應用只需要查詢一次,而在數據庫中做關聯查詢,則可能需

要重復地訪問一部分數據。從這點看,這樣的重構還可能會減少網絡和內存的消艷。

更進一步,這樣做相當于在應用中實現了哈希關聯,而不是使用MySQL的嵌套循環(huán)關聯。某些場景哈希關聯的效率要高很多。

二、應用層關聯的使用場景

當應用能夠方便地緩存單個查詢的結果的時候

當可以將數據分布到不同的MySQL服務器上的時候

當能夠使用IN()的方式代替關聯查詢的時候

并發(fā)場景多,DB查詢頻繁,需要分庫分表

三、不推薦使用join的原因

1.DB承擔的業(yè)務壓力大,能減少負擔就減少。當表處于百萬級別后,join導致性能下降;
2.分布式的分庫分表。這種時候是不建議跨庫join的。目前mysql的分布式中間件,跨庫join表現不良。
3.修改表的schema,單表查詢的修改比較容易,join寫的sql語句要修改,不容易發(fā)現,成本比較大,當系統(tǒng)比較大時,不好維護。

四、不使用join的解決方案

在業(yè)務層,單表查詢出數據后,作為條件給下一個單表查詢。也就是子查詢。會擔心子查詢出來的結果集太多。mysql對in的數量沒有限制,但是mysql限制整條sql語句的大小。通過調整參數max_allowed_packet ,可以修改一條sql的最大值。建議在業(yè)務上做好處理,限制一次查詢出來的結果集是能接受的。

五、join查詢的優(yōu)勢

關聯查詢的好處是可以做分頁,可以用副表的字段做查詢條件,在查詢的時候,將副表匹配到的字段作為結果集,用主表去in它。但是問題來了,如果匹配到的數據量太大就不行了,也會導致返回的分頁記錄跟實際的不一樣,解決的方法可以交給前端,一次性查詢,讓前端分批顯示就可以了,這種解決方案的前提是數據量不太,因為sql本身長度有限。

到此這篇關于淺談為什么MySQL不推薦使用子查詢和join的文章就介紹到這了,更多相關MySQL 子查詢和join內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文帶你搞懂mysql中的三種數據讀取方式

    一文帶你搞懂mysql中的三種數據讀取方式

    在與MySQL數據庫交互時,數據的讀取方式有多種選擇,每種方式都有其獨特的原理、優(yōu)勢和劣勢,本文將對這三種讀取方式進行詳細介紹,需要的可以參考下
    2024-12-12
  • linux centos7安裝mysql8的教程

    linux centos7安裝mysql8的教程

    這篇文章主要介紹了linux centos7安裝mysql8的教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • MySQL?Test?Run?測試框架詳細介紹?

    MySQL?Test?Run?測試框架詳細介紹?

    這篇文章主要介紹了MySQL?Test?Run?測試框架,主要通過include、suite展開MySQL?Test?Run?測試框架相關內容,文章介紹詳細,需要的小伙伴可以參考一下
    2022-02-02
  • MySQL如何支撐起億級流量

    MySQL如何支撐起億級流量

    當每天新增數據上億級的時候,單表數據量在百萬級別,數據庫服務器的高峰期寫入壓力、查詢壓力在都很高的時候,該如何讓MySQL順利支撐起來呢?本片文章將教給你詳細的方案
    2021-09-09
  • MySQL修改innodb_data_file_path參數的一些注意事項

    MySQL修改innodb_data_file_path參數的一些注意事項

    這篇文章主要給大家介紹了關于MySQL修改innodb_data_file_path參數的一些注意事項,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • Mysql?8.4.0?結合?Docker?搭建GTID主從復制及傳統(tǒng)主從復制詳解

    Mysql?8.4.0?結合?Docker?搭建GTID主從復制及傳統(tǒng)主從復制詳解

    這篇文章主要介紹了Mysql?8.4.0?結合?Docker?搭建GTID主從復制,以及傳統(tǒng)主從復制,本文給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-06-06
  • mysql忘記密碼怎么辦

    mysql忘記密碼怎么辦

    mysql忘記密碼怎么辦?這篇文章主要為大家詳細介紹了MySQL忘記密碼的解決辦法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 簡單談談MySQL中的int(m)

    簡單談談MySQL中的int(m)

    設置int型的時候,需要設置int(M),以前知道這個M最大是255,但是到底應該設置多少并沒有在意。注意zerofill,今天我們來簡單探討下
    2016-09-09
  • 在Mysql數據庫里通過存儲過程實現樹形的遍歷

    在Mysql數據庫里通過存儲過程實現樹形的遍歷

    關于多級別菜單欄或者權限系統(tǒng)中部門上下級的樹形遍歷,oracle中有connect by來實現,mysql沒有這樣的便捷途徑,所以MySQL遍歷數據表是我們經常會遇到的頭痛問題,下面給大家介紹在Mysql數據庫里通過存儲過程實現樹形的遍歷,一起看看吧
    2016-11-11
  • MYSQL數據庫GTID實現主從復制實現(超級方便)

    MYSQL數據庫GTID實現主從復制實現(超級方便)

    這篇文章主要介紹了MYSQL數據庫GTID實現主從復制實現(超級方便),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11

最新評論

荆州市| 霸州市| 德庆县| 奉贤区| 雷山县| 高尔夫| 桦川县| 肥东县| 永和县| 兰考县| 伊金霍洛旗| 大英县| 咸阳市| 项城市| 静安区| 晋州市| 长阳| 晋城| 白河县| 揭东县| 绥宁县| 本溪市| 苗栗县| 英山县| 阿巴嘎旗| 托里县| 扶风县| 长治县| 巴中市| 望城县| 土默特右旗| 天气| 新兴县| 营山县| 海宁市| 古蔺县| 闽清县| 从化市| 通江县| 阳江市| 龙井市|