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

一文詳解MySQL?Join使用原理

 更新時間:2023年04月25日 10:58:20   作者:在下uptown  
JOIN是一種非常常見的操作,用于將兩個或多個表中的數(shù)據(jù)合并到一個結(jié)果集中。MySQL支持多種JOIN類型,本文通過代碼示例詳細(xì)介紹了Join的使用優(yōu)化,有需要的小伙伴可以參考閱讀

Join的類型

  • left join,以左表為驅(qū)動表,以左表作為結(jié)果集基礎(chǔ),連接右表的數(shù)據(jù)補齊到結(jié)果集中

  • right join,以右表為驅(qū)動表,以右表作為結(jié)果集基礎(chǔ),連接左表的數(shù)據(jù)補齊到結(jié)果集中

  • inner join,結(jié)果集取兩個表的交集

  • full join,結(jié)果集取兩個表的并集
  • mysql沒有full join,union取代

    union與union all的區(qū)別為,union會去重

  • cross join 笛卡爾積
  • 如果不使用where條件則結(jié)果集為兩個關(guān)聯(lián)表行的乘積

    與,的區(qū)別為,cross join建立結(jié)果集時會根據(jù)on條件過濾結(jié)果集合

  • straight_join
  • 嚴(yán)格根據(jù)SQL順序指定驅(qū)動表,左表是驅(qū)動

Join原理

本質(zhì)上可以理解為嵌套循環(huán)的操作,驅(qū)動表作為外層for循環(huán),被驅(qū)動表作為內(nèi)層for循環(huán)。根據(jù)連接組成數(shù)據(jù)的策略可以分為三種算法。

Simpe Nested-Loop Join

  • 連接比如有A表,B表,兩個表JOIN的話會拿著A表的連表條件一條一條在B表循環(huán),匹配A表和B表相同的id 放入結(jié)果集,這種效率是最低的。

Index Nested-Loop Join

  • 執(zhí)行流程(磁盤掃描)
  • 從表t1中讀入一行數(shù)據(jù) R;

    從數(shù)據(jù)行R中,取出a字段到表t2里進(jìn)行樹搜索查找;

    取出表t2中滿足條件的行,跟R組成一行,作為結(jié)果集的一部分;

    重復(fù)執(zhí)行步驟1到3,直到表t1的末尾循環(huán)結(jié)束。

  • 而對于每一行R,根據(jù)a字段去表t2查找,走的是樹搜索過程。

Block Nested-Loop Join

  • mysql使用了一個叫join buffer的緩沖區(qū)去減少循環(huán)次數(shù),這個緩沖區(qū)默認(rèn)是256KB,可以通過命令show variables like 'join_%'查看
  • 其具體的做法是,將第一表中符合條件的列一次性查詢到緩沖區(qū)中,然后遍歷一次第二個表,并逐一和緩沖區(qū)的所有值比較,將比較結(jié)果加入結(jié)果集中
  • 只有當(dāng)JOIN類型為ALL,index,rang或者是index_merge的時候才會使用join buffer,可以通過explain查看SQL的查詢類型。

Join優(yōu)化

  • 為了優(yōu)化join算法采用Index nested-loop join算法,在連接字段上建立索引字段
  • 使用數(shù)據(jù)量小的表去驅(qū)動數(shù)據(jù)量大的表
  • 增大join buffer size的大?。ㄒ淮尉彺娴臄?shù)據(jù)越多,那么外層表循環(huán)的次數(shù)就越少)
  • 注意連接字段的隱式轉(zhuǎn)換與字符編碼,避免索引失效

到此這篇關(guān)于一文詳解MySQL Join使用原理的文章就介紹到這了,更多相關(guān)MySQL Join原理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql的Explain使用方式及索引總結(jié)

    Mysql的Explain使用方式及索引總結(jié)

    這篇文章主要介紹了Mysql的Explain使用方式及索引總結(jié),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SQL注入漏洞過程實例及解決方案

    SQL注入漏洞過程實例及解決方案

    這篇文章主要介紹了SQL注入漏洞過程實例及解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • mysql數(shù)據(jù)庫自動添加創(chuàng)建時間及更新時間

    mysql數(shù)據(jù)庫自動添加創(chuàng)建時間及更新時間

    在實際應(yīng)用中我們時常會需要用到創(chuàng)建時間和更新時間這兩個字段,下面這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫自動添加創(chuàng)建時間及更新時間的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • MySQL數(shù)據(jù)庫的shell腳本自動備份

    MySQL數(shù)據(jù)庫的shell腳本自動備份

    這篇文章主要介紹了MySQL數(shù)據(jù)庫的shell腳本自動備份的相關(guān)資料,網(wǎng)站或應(yīng)用的后臺都有備份數(shù)據(jù)庫的功能按鈕,但需要去手工執(zhí)行。我們需要一種安全的,每天自動備份的方法需要的朋友可以參考下
    2017-03-03
  • MySQL Slave 觸發(fā) oom-killer解決方法

    MySQL Slave 觸發(fā) oom-killer解決方法

    這篇文章主要介紹了MySQL Slave 觸發(fā) oom-killer解決方法,需要的朋友可以參考下
    2016-07-07
  • 詳解MySQL數(shù)據(jù)庫千萬級數(shù)據(jù)查詢和存儲

    詳解MySQL數(shù)據(jù)庫千萬級數(shù)據(jù)查詢和存儲

    百萬級、千萬級數(shù)據(jù)處理,核心關(guān)鍵在于數(shù)據(jù)存儲方案設(shè)計,存儲方案設(shè)計的是否合理,直接影響到數(shù)據(jù)CRUD操作。總體設(shè)計可以考慮一下幾個方面進(jìn)行設(shè)計考慮:數(shù)據(jù)存儲結(jié)構(gòu)設(shè)計;索引設(shè)計;數(shù)據(jù)主鍵設(shè)計;查詢方案設(shè)計。
    2021-05-05
  • MySQL三大日志(binlog、redo?log和undo?log)圖文詳解

    MySQL三大日志(binlog、redo?log和undo?log)圖文詳解

    日志是MySQL數(shù)據(jù)庫的重要組成部分,記錄著數(shù)據(jù)庫運行期間各種狀態(tài)信息,下面這篇文章主要給大家介紹了關(guān)于MySQL三大日志(binlog、redo?log和undo?log)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 分享MySQL的自動化安裝部署的方法

    分享MySQL的自動化安裝部署的方法

    線上的MySQL一般都采用源碼編譯,雖然MySQL的源碼編譯挺簡單的,但是試想一下,如果你有幾百臺服務(wù)器同時要安裝MySQL,難道你還一臺臺去手動編譯、編寫配置文件嗎?這顯然太低效了,本文討論MySQL的自動化安裝部署。
    2014-07-07
  • Ubuntu上mysql的安裝及使用(通用版)

    Ubuntu上mysql的安裝及使用(通用版)

    今天小編就為大家分享一篇關(guān)于Ubuntu上mysql的安裝及使用(通用版),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • RedHat下MySQL的基本使用方法分享

    RedHat下MySQL的基本使用方法分享

    RedHat 下MySQL安裝,簡單設(shè)置以用基本的使用方法,需要的朋友可以參考下。
    2011-08-08

最新評論

宁陵县| 吉木萨尔县| 博客| 靖宇县| 留坝县| 苏尼特左旗| 郓城县| 宾川县| 卓尼县| 安远县| 洪湖市| 竹溪县| 抚顺市| 舟曲县| 河源市| 四平市| 黄浦区| 彰武县| 屏边| 阿拉善左旗| 子洲县| 陇川县| 长兴县| 永清县| 岗巴县| 汶上县| 凌海市| 随州市| 五大连池市| 渝中区| 菏泽市| 墨江| 高台县| 庆云县| 天津市| 丰顺县| 聂荣县| 阿克苏市| 监利县| 辰溪县| 纳雍县|