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

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

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

做分頁(yè)查詢:

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

一、應(yīng)用層關(guān)聯(lián)的優(yōu)勢(shì)

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

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

在應(yīng)用層做關(guān)聯(lián),可以更容易對(duì)數(shù)據(jù)庫(kù)進(jìn)行拆分,更容易做到高性能和可擴(kuò)展。

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

可以減少冗余記錄的查詢。在應(yīng)用層做關(guān)聯(lián)查詢,意味著對(duì)于某條記錄應(yīng)用只需要查詢一次,而在數(shù)據(jù)庫(kù)中做關(guān)聯(lián)查詢,則可能需

要重復(fù)地訪問一部分?jǐn)?shù)據(jù)。從這點(diǎn)看,這樣的重構(gòu)還可能會(huì)減少網(wǎng)絡(luò)和內(nèi)存的消艷。

更進(jìn)一步,這樣做相當(dāng)于在應(yīng)用中實(shí)現(xiàn)了哈希關(guān)聯(lián),而不是使用MySQL的嵌套循環(huán)關(guān)聯(lián)。某些場(chǎng)景哈希關(guān)聯(lián)的效率要高很多。

二、應(yīng)用層關(guān)聯(lián)的使用場(chǎng)景

當(dāng)應(yīng)用能夠方便地緩存單個(gè)查詢的結(jié)果的時(shí)候

當(dāng)可以將數(shù)據(jù)分布到不同的MySQL服務(wù)器上的時(shí)候

當(dāng)能夠使用IN()的方式代替關(guān)聯(lián)查詢的時(shí)候

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

三、不推薦使用join的原因

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

四、不使用join的解決方案

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

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

關(guān)聯(lián)查詢的好處是可以做分頁(yè),可以用副表的字段做查詢條件,在查詢的時(shí)候,將副表匹配到的字段作為結(jié)果集,用主表去in它。但是問題來了,如果匹配到的數(shù)據(jù)量太大就不行了,也會(huì)導(dǎo)致返回的分頁(yè)記錄跟實(shí)際的不一樣,解決的方法可以交給前端,一次性查詢,讓前端分批顯示就可以了,這種解決方案的前提是數(shù)據(jù)量不太,因?yàn)閟ql本身長(zhǎng)度有限。

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

相關(guān)文章

  • 一文帶你搞懂mysql中的三種數(shù)據(jù)讀取方式

    一文帶你搞懂mysql中的三種數(shù)據(jù)讀取方式

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

    linux centos7安裝mysql8的教程

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

    MySQL?Test?Run?測(cè)試框架詳細(xì)介紹?

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

    MySQL如何支撐起億級(jí)流量

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

    MySQL修改innodb_data_file_path參數(shù)的一些注意事項(xiàng)

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

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

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

    mysql忘記密碼怎么辦

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

    簡(jiǎn)單談?wù)凪ySQL中的int(m)

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

    在Mysql數(shù)據(jù)庫(kù)里通過存儲(chǔ)過程實(shí)現(xiàn)樹形的遍歷

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

    MYSQL數(shù)據(jù)庫(kù)GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級(jí)方便)

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

最新評(píng)論

成都市| 女性| 城固县| 陆河县| 剑川县| 内丘县| 兰坪| 合水县| 道真| 乌什县| 思南县| 周口市| 九龙县| 余江县| 诏安县| 铁力市| 贵德县| 蓬安县| 台州市| 东阳市| 探索| 罗定市| 开原市| 宁陕县| 古蔺县| 绥滨县| 甘孜| 宜阳县| 肥乡县| 柳江县| 沧州市| 乳山市| 洛川县| 木兰县| 峨眉山市| 海林市| 雷州市| 奎屯市| 舞阳县| 鄂温| 成武县|