好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 淺談mysql join底層原理

淺談mysql join底層原理

熱門標(biāo)簽:外東北地圖標(biāo)注 400電話可以辦理嗎 臨清電話機(jī)器人 智能外呼系統(tǒng)復(fù)位 云南電商智能外呼系統(tǒng)價格 大眾點(diǎn)評星級酒店地圖標(biāo)注 高清地圖標(biāo)注道路 話務(wù)外呼系統(tǒng)怎么樣 拉卡拉外呼系統(tǒng)

join算法

mysql只支持一種join算法:Nested-Loop Join(嵌套循環(huán)連接),但Nested-Loop Join有三種變種:

  • Simple Nested-Loop Join,簡單嵌套
  • Index Nested-Loop Join,索引嵌套
  • Block Nested-Loop Join ,join buffer緩沖區(qū)嵌套(臨時表)

驅(qū)動表和非驅(qū)動表的區(qū)別

驅(qū)動表就是主表,非驅(qū)動表就是從表,看以下sql就知道了,A就是驅(qū)動表,B就是非驅(qū)動表。

select * from A left join B

A join B 連表時,一定先查A表再查B表嗎?

答案是不一定,因?yàn)閙ysql內(nèi)部有一個優(yōu)化器,它會根據(jù)你查詢語句做一些優(yōu)化,先查哪張表也是由優(yōu)化器決定的,但可以肯定的是,先查詢的那張表就是驅(qū)動表,反之就是非驅(qū)動表;關(guān)于是那張表先查的問題,我們通過看執(zhí)行計劃來得出結(jié)果;在前面加上explain關(guān)鍵字即可;

explain select * from A join B;

1、Simple Nested-Loop Join,簡單嵌套-無索引的情況

A left join B: ,每次都是全表匹配,A表的每行數(shù)據(jù)都全表匹配一次B表,也就是說,假如我A表有10條數(shù)據(jù),B表有1000條數(shù)據(jù),那么查詢的時候掃描次數(shù)就是10*1000,也就說查詢時需要掃描10000遍才能得出數(shù)據(jù);

2、Index Nested-Loop Join-有索引的情況

select * from A join B on A.id=B.id where A.id = 1:在查詢時,驅(qū)動表A會根據(jù)關(guān)聯(lián)字段的索引進(jìn)行查找,當(dāng)在索引上找到符合的值,在回表進(jìn)行查詢,也就是說得匹配到索引后才會才會進(jìn)行回表查詢;
如果非驅(qū)動表B的關(guān)聯(lián)關(guān)聯(lián)字段B.id是主鍵的話,性能會非常高,如果不是主鍵,會進(jìn)行多次回表查詢,先關(guān)聯(lián)索引,然后根據(jù)二級索引的主鍵id進(jìn)行回表查詢,性能上比主鍵要慢;

3、Block Nested-Loop Join ,join buffer緩沖區(qū)

如果有索引,會選取Index Nested-Loop Join進(jìn)行連表,如果join列沒有索引,就會采用Block Nested-Loop Join ,join buffer,在驅(qū)動表和非驅(qū)動表中間有個buffer的緩沖區(qū),在查詢時先將驅(qū)動表的數(shù)據(jù)緩存到buffer緩沖區(qū)內(nèi),然后批量與非驅(qū)動表進(jìn)行匹配,這是一種將多次比較合并為一次比較的優(yōu)化方案,注意:這里緩存的不只是關(guān)聯(lián)表的列,select 后面的列也會緩存起來;

緩沖區(qū)大小

默認(rèn)情況下buffer緩沖區(qū)join_biffer_size的容量為256k,如果說你的數(shù)據(jù)空間大于256k,就無法使用緩沖區(qū)了,轉(zhuǎn)為最簡單的循環(huán)嵌套Simple Nested-Loop Join,但是我們可以手動調(diào)整緩沖區(qū)大小來裝入大容量的數(shù)據(jù);查看join_biffer_size的sql:show variables like '%join_biffer_size%'

數(shù)據(jù)量大的表和數(shù)據(jù)量小的表如何選擇連接順序

最好由小表去連接大表,這樣會減少掃描次數(shù);比如大表有1000條數(shù)據(jù),小表只有10條數(shù)據(jù),那么最好的連接方式為:小表 join 大表;為什么要這么做呢?

  • 如果是大表 join 小表,假如我們的數(shù)據(jù)在大表的第999行,那么查詢數(shù)據(jù)的時候就至少得掃描999次才能查出來;
  • 如果是小表 join 大表,假如我們的數(shù)據(jù)在小表的第9行,

細(xì)節(jié)

  • 連表查詢的時候,最好不要超過三張表,因?yàn)樾枰猨oin的字段,數(shù)據(jù)類型必須一致
  • 優(yōu)先使用內(nèi)連接來連表,外連接查詢數(shù)據(jù)消耗的性能比內(nèi)連接要高;
  • 確保關(guān)聯(lián)查詢中on 后面的列或者 using()中的字段帶有索引,連表時可加快數(shù)據(jù)訪問

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

您可能感興趣的文章:
  • SQL語句中JOIN的用法場景分析
  • MYSQL數(shù)據(jù)庫基礎(chǔ)之Join操作原理
  • 解決Mysql的left join無效及使用的注意事項說明
  • mysql left join快速轉(zhuǎn)inner join的過程
  • 為什么代碼規(guī)范要求SQL語句不要過多的join
  • mysql高效查詢left join和group by(加索引)
  • MySQL的join buffer原理
  • SQL之各種join小結(jié)詳細(xì)講解

標(biāo)簽:定西 山西 無錫 阿里 溫州 福州 三明 揚(yáng)州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談mysql join底層原理》,本文關(guān)鍵詞  淺談,mysql,join,底層,原理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺談mysql join底層原理》相關(guān)的同類信息!
  • 本頁收集關(guān)于淺談mysql join底層原理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 破了高中mm的处| 就是操就是干| 精品国产美女福到在线直播| 明里久久久久久久久久| 俄罗斯18–19sex性HSD| freesexvideos性21| 抖抈app入口免费| 中国的毛片| 黑料不打烊最新地址| 男亲女爱视频免费观看| 一级做α爱全过程免费视频| 欧洲女人免费观看视频| 欧美日韩中字国产| 日本乱人伦片中文三区| 欧美性啪啪| 亚洲无矿砖专区的使用方法| 香大伊煮香大伊煮大象大象| 伧理电影伧理片2019| 欧美成人精品无码区一本在线播放 | 久久er99热精品一区二区免费| 被滋润的娇妻疯狂呻吟口述| 美女脱衣服一干二净| 操波多野结衣| 性夜久久一区国产9人妻| 91无码精品国产AⅤ在线www| 男人猛进女人身体视频| 国产精品一区亚洲一区天堂| 8090新视觉伦理| av日本无码线观一区乳区| 《教室爱欲》韩国电影| 欧美人成网| freehdxxxxtubevideo| 动漫女扒开腿爆乳羞羞视频| 亚洲日韩Av无码毛片丝袜| 操久久久| 天天干在线免费视频| 看黄无限数入口| 柳州莫菁门久久久久久久| 少妇高潮喷水惨叫久无码一区二区| 国产香蕉75在线播放| 杨晨晨被老师掀裙子露内内|