欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文詳解MySQL?Join使用原理

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

Join的類(lèi)型

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

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

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

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

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

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

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

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

Join原理

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

Simpe Nested-Loop Join

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

Index Nested-Loop Join

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

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

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

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

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

Block Nested-Loop Join

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

Join優(yōu)化

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

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

相關(guān)文章

  • Mysql 用戶(hù)權(quán)限管理實(shí)現(xiàn)

    Mysql 用戶(hù)權(quán)限管理實(shí)現(xiàn)

    MySQL 是一個(gè)多用戶(hù)數(shù)據(jù)庫(kù),具有功能強(qiáng)大的訪問(wèn)控制系統(tǒng),可以為不同用戶(hù)指定不同權(quán)限。本文就來(lái)介紹一下Mysql 用戶(hù)權(quán)限管理實(shí)現(xiàn),感興趣的可以了解一下
    2021-05-05
  • 淺談MySQL表空間回收的正確姿勢(shì)

    淺談MySQL表空間回收的正確姿勢(shì)

    隨著時(shí)間的推移,表里面的數(shù)據(jù)越來(lái)越多,表數(shù)據(jù)文件越來(lái)越大,數(shù)據(jù)庫(kù)占用的空間自然也逐漸增長(zhǎng),本文主要介紹了MySQL表空間回收,感興趣的可以了解一下
    2021-09-09
  • 深入解讀Mysql查詢(xún)性能的優(yōu)化

    深入解讀Mysql查詢(xún)性能的優(yōu)化

    這篇文章主要介紹了深入解讀Mysql查詢(xún)性能的優(yōu)化,如果想要優(yōu)化查詢(xún),就需要優(yōu)化其子任務(wù),要么你就消除其中的一些子任務(wù),要么就減少子任務(wù)的執(zhí)行次數(shù),要么就讓子任務(wù)運(yùn)行的更快,需要的朋友可以參考下
    2023-07-07
  • MySQL InnoDB和MyISAM數(shù)據(jù)引擎的差別分析

    MySQL InnoDB和MyISAM數(shù)據(jù)引擎的差別分析

    InnoDB和MyISAM是在使用MySQL最常用的兩個(gè)表類(lèi)型,各有優(yōu)缺點(diǎn),視具體應(yīng)用而定?;镜牟顒e為:MyISAM類(lèi)型不支持事務(wù)處理等高級(jí)處理,而InnoDB類(lèi)型支持
    2011-05-05
  • mysql聯(lián)合索引最左匹配原則的底層實(shí)現(xiàn)原理解讀

    mysql聯(lián)合索引最左匹配原則的底層實(shí)現(xiàn)原理解讀

    這篇文章主要介紹了mysql聯(lián)合索引最左匹配原則的底層實(shí)現(xiàn)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Mysql中文漢字轉(zhuǎn)拼音的實(shí)現(xiàn)(每個(gè)漢字轉(zhuǎn)換全拼)

    Mysql中文漢字轉(zhuǎn)拼音的實(shí)現(xiàn)(每個(gè)漢字轉(zhuǎn)換全拼)

    這篇文章主要介紹了Mysql中文漢字轉(zhuǎn)拼音的實(shí)現(xiàn),并且每個(gè)漢字會(huì)轉(zhuǎn)換全拼,使用Mysql自定義函數(shù)實(shí)現(xiàn),需要的朋友可以參考下
    2014-06-06
  • MySQL保證數(shù)據(jù)不丟失的方案詳解

    MySQL保證數(shù)據(jù)不丟失的方案詳解

    MySQL作為一個(gè)存儲(chǔ)數(shù)據(jù)的產(chǎn)品,怎么確保數(shù)據(jù)的持久性和不丟失才是最重要的,感興趣的可以跟隨本文一探究竟,文中通過(guò)圖文結(jié)合給大家講解的非常詳細(xì),需要的朋友快來(lái)跟著小編一起來(lái)學(xué)習(xí)吧
    2023-12-12
  • 一文了解MySQL Optimizer Trace的神奇功能

    一文了解MySQL Optimizer Trace的神奇功能

    這篇文章主要為大家介紹了一文了解MySQL Optimizer Trace的神奇功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • MySQL group_concat函數(shù)使用方法詳解

    MySQL group_concat函數(shù)使用方法詳解

    GROUP_CONCAT函數(shù)用于將GROUP BY產(chǎn)生的同一個(gè)分組中的值連接起來(lái),返回一個(gè)字符串結(jié)果,接下來(lái)就給大家簡(jiǎn)單的介紹一下MySQL group_concat函數(shù)的使用方法,需要的朋友可以參考下
    2023-07-07
  • 一鍵清空(重置)本地MySQL8.0密碼腳本

    一鍵清空(重置)本地MySQL8.0密碼腳本

    這篇文章主要介紹了一鍵清空本地MySQL8.0密碼腳本,再也不用擔(dān)心MySQL密碼忘記了,很容易的解決了忘記mysql密碼的煩惱,操作方法也非常簡(jiǎn)單,需要的朋友可以參考下
    2023-01-01

最新評(píng)論