国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MySQL】左連接右連接內(nèi)連接與Hash連接、子查詢原理與實戰(zhàn)(MySQL專欄啟動)

這篇具有很好參考價值的文章主要介紹了【MySQL】左連接右連接內(nèi)連接與Hash連接、子查詢原理與實戰(zhàn)(MySQL專欄啟動)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

左連接子查詢,《MySQL從入門到精通與實戰(zhàn)》,java,開發(fā)語言,數(shù)據(jù)庫,mysql

??作者簡介:小明java問道之路,專注于研究 Java/ Liunx內(nèi)核/ C++及匯編/計算機(jī)底層原理/源碼,就職于大型金融公司后端高級工程師,擅長交易領(lǐng)域的高安全/可用/并發(fā)/性能的架構(gòu)設(shè)計與演進(jìn)、系統(tǒng)優(yōu)化與穩(wěn)定性建設(shè)。

??

?? 熱衷分享,喜歡原創(chuàng)~ 關(guān)注我會給你帶來一些不一樣的認(rèn)知和成長。

?? InfoQ簽約作者、CSDN專家博主/后端領(lǐng)域優(yōu)質(zhì)創(chuàng)作者/內(nèi)容合伙人、阿里云專家/簽約博主、51CTO專家 ??

??如果此文還不錯的話,還請??關(guān)注、點(diǎn)贊、收藏三連支持??一下博主~?

本文目錄

本文目錄

本文導(dǎo)讀

一、MySQL數(shù)據(jù)庫JOIN連接

1、inner join

2、LEFT JOIN

3、RIGHT JOIN

二、MySQL數(shù)據(jù)庫Hash Join

1、什么是?Hash Join

2、Hash JOIN 工作原理

三、子查詢

總結(jié)


本文導(dǎo)讀

本文介紹MySQL數(shù)據(jù)庫中的左連接、右連接、內(nèi)連接與Hash連接的工作原理,并分析子查詢與 JOIN 的不同,根據(jù)本文所學(xué)提供一些工作中需要掌握的實戰(zhàn)技巧。文章來源地址http://www.zghlxwxcb.cn/news/detail-781203.html

一、MySQL數(shù)據(jù)庫JOIN連接

在多個表上創(chuàng)建索,并且多個表JOIN和子查詢語句相對比較困難。許多開發(fā)人員不自覺地認(rèn)為JOIN 會降低 SQL 的性能效率,因此他們將多表 SQL 拆分為單表查詢,認(rèn)為這會影響SQL執(zhí)行的效率,原因是開發(fā)人員不了解JOIN實現(xiàn)過程。

聯(lián)接之間的表關(guān)聯(lián)使用索引進(jìn)行匹配,假設(shè)表R和表S是連接的。

表R被稱為驅(qū)動表,表R中通過WHERE條件過濾的數(shù)據(jù)將在表S對應(yīng)的索引上逐個查詢。如果驅(qū)動表R的數(shù)據(jù)量不大,則上述算法非常有效。

以下三種 JOIN 類型,驅(qū)動表各是哪張表:

SELECT * FROM R LEFT JOIN S ON R.x = S.x WEHRE ...
SELECT * FROM R RIGHT JOIN S ON R.x = S.x WEHRE ...
SELECT * FROM R INNER JOIN S ON R.x = S.x WEHRE ...

1、inner join

對于 INNER JOIN,驅(qū)動表可能是表 R,也可能是表 S。顯示左邊右邊共有的數(shù)據(jù)。

在這種場景下,誰需要查詢的數(shù)據(jù)量越少,誰就是驅(qū)動表。 我們來看下面的例子

SELECT * FROM R INNER JOIN S? ON R.x = S.x? WHERE R.y = ? AND S.z = ?

2、LEFT JOIN

上述 Left Join 來說,驅(qū)動表就是左表 R;Right Join中,驅(qū)動表就是右表 S。這是 JOIN 類型決定左表或右表的數(shù)據(jù)一定要進(jìn)行查詢。

返回包括左表中的所有記錄和右表中聯(lián)結(jié)字段相等的記錄。即使右表中沒有匹配,也從左表返回所有的行。

SELECT * FROM R LEFT JOIN S  ON R.x = S.x  WHERE R.y = ? AND S.z = ?

3、RIGHT JOIN

上述 Left Join 來說,驅(qū)動表就是左表 R;Right Join中,驅(qū)動表就是右表 S。這是 JOIN 類型決定左表或右表的數(shù)據(jù)一定要進(jìn)行查詢。

返回包括右表中的所有記錄和左表中聯(lián)結(jié)字段相等的記錄。即使左表中沒有匹配,也從右表返回所有的行。

SELECT * FROM R RIGHT JOIN S  ON R.x = S.x  WHERE R.y = ? AND S.z = ?

二、MySQL數(shù)據(jù)庫Hash Join

1、什么是?Hash Join

MySQL中的第二個 JOIN 是 Hash JOIN,當(dāng)兩個表之間的連接條件沒有索引時使用該算法。

如果沒有連接,那么創(chuàng)建索引可以嗎?

如果某些列是選擇性低的索引,則在創(chuàng)建索引以導(dǎo)入數(shù)據(jù)時必須對數(shù)據(jù)進(jìn)行排序,這會影響導(dǎo)入性能;輔助索引將出現(xiàn)返回表的問題。如果過濾的數(shù)據(jù)量很大,直接全表掃描會更快。

對于OLAP業(yè)務(wù)查詢(OLAP 是在線分析處理用于數(shù)據(jù)分析,它使我們能夠同時分析來自多個數(shù)據(jù)庫系統(tǒng)的信息),哈希連接是一個必不可少的功能。MySQL 8.0開始支持 Hash Join算法,加強(qiáng)了對 OLAP 業(yè)務(wù)的支持。

因此,如果您的查詢數(shù)據(jù)量不太大,并且查詢的響應(yīng)時間要求在分鐘級別,則可以使用單實例MySQL 8.0來完成大數(shù)據(jù)的查詢。

2、Hash JOIN 工作原理

Hash JOIN出現(xiàn)在MySQL 8.0的執(zhí)行計劃中,Hash JOIN 掃描關(guān)聯(lián)的兩個表:首先,在掃描驅(qū)動器表的過程中創(chuàng)建一個哈希表;當(dāng)掃描第二個表時,將在哈希表中搜索每個關(guān)聯(lián)記錄。如果找到,將返回記錄。

哈希連接選擇驅(qū)動程序表和嵌套循環(huán)連接算法,兩者基本相同。兩個較小的表都用作驅(qū)動程序表.如果驅(qū)動器表很大,并且創(chuàng)建的哈希表超過了內(nèi)存大小,MySQL將自動將結(jié)果轉(zhuǎn)儲到磁盤。

三、子查詢

我發(fā)現(xiàn)相當(dāng)多的開發(fā)同學(xué),包括我自己更喜歡編寫子查詢,而不是傳統(tǒng)的JOIN語句。

子查詢的邏輯非常清晰。雖然 JOIN 也可以滿足需求,但這并不容易理解,因為LEFT JOIN是一種代數(shù)關(guān)系,子查詢更傾向于從人類思維的角度來理解。

然而,在MySQL 8.0中,優(yōu)化器會自動將 in 子查詢優(yōu)化為 JOIN 執(zhí)行計劃,這將顯著提高性能。

我們只需要關(guān)注SQL執(zhí)行計劃,如果兩個執(zhí)行計劃相同,則性能沒有差異。

在MySQL 8.0之前,MySQL沒有完全優(yōu)化子查詢。因此,您將在子查詢的執(zhí)行計劃中看到DEPENDENT SUBQUERY的提示,這表明它是一個從屬子查詢,子查詢需要依賴外部表的關(guān)聯(lián)。DEPENDENT SUBQUERY的執(zhí)行速度可能非常慢,而且大多數(shù)時候您需要手動將其轉(zhuǎn)換為兩個表之間的連接。

所以這里博主提示大家,如果你的當(dāng)前的MySQL 8.0版本可以編寫子查詢,因為子查詢的優(yōu)化相當(dāng)完整;

對于 MySQL 8.0 之前版本的MySQL,需要查看所有子查詢的 SQL 執(zhí)行計劃。對于 DEPENDENT SUBQUERY 的提示,要進(jìn)行優(yōu)化,否則將對業(yè)務(wù)產(chǎn)生重大性能影響;DEPENDENT SUBQUERY的優(yōu)化通常被重寫為用于表連接的派生表。

總結(jié)

本文介紹MySQL數(shù)據(jù)庫中的左連接、右連接、內(nèi)連接與Hash連接的工作原理,并分析子查詢與 JOIN 的不同,根據(jù)本文所學(xué)提供一些工作中需要掌握的實戰(zhàn)技巧。

到了這里,關(guān)于【MySQL】左連接右連接內(nèi)連接與Hash連接、子查詢原理與實戰(zhàn)(MySQL專欄啟動)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【MySQL】高性能高可用表設(shè)計實戰(zhàn)-表設(shè)計篇(MySQL專欄啟動)

    【MySQL】高性能高可用表設(shè)計實戰(zhàn)-表設(shè)計篇(MySQL專欄啟動)

    ??作者簡介: 小明java問道之路,專注于研究 Java/ Liunx內(nèi)核/ C++及匯編/計算機(jī)底層原理/源碼,就職于大型金融公司后端高級工程師,擅長交易領(lǐng)域的高安全/可用/并發(fā)/性能的架構(gòu)設(shè)計與演進(jìn)、系統(tǒng)優(yōu)化與穩(wěn)定性建設(shè)。 ? ?? 熱衷分享,喜歡原創(chuàng)~ 關(guān)注我會給你帶來一些不一樣

    2024年02月11日
    瀏覽(22)
  • MySQL兩個表的親密接觸-連接查詢的原理

    MySQL兩個表的親密接觸-連接查詢的原理

    MySQL對于被驅(qū)動表的關(guān)聯(lián)字段沒索引的關(guān)聯(lián)查詢,一般都會使用 BNL 算法。如果有索引一般選擇 NLJ 算法,有 索引的情況下 NLJ 算法比 BNL算法性能更高。 關(guān)系型數(shù)據(jù)庫還有一個重要的概念:Join(連接)。使用Join有好處,也會壞處,只有我們明白了其中的原理,才能更多的使用

    2024年01月25日
    瀏覽(19)
  • 【mysql性能調(diào)優(yōu) ? 二】mysql的啟動關(guān)閉原理和實戰(zhàn),及常見的錯誤排查

    【mysql性能調(diào)優(yōu) ? 二】mysql的啟動關(guān)閉原理和實戰(zhàn),及常見的錯誤排查

    前言 MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件之一。本文章收錄在MySQL性能優(yōu)化+原理+實戰(zhàn)

    2023年04月15日
    瀏覽(23)
  • 【MySQL】InnoDB和MyISAM區(qū)別詳解(MySQL專欄啟動)

    【MySQL】InnoDB和MyISAM區(qū)別詳解(MySQL專欄啟動)

    ??作者簡介: 小明java問道之路 , 2022年度博客之星全國TOP3 ,專注于后端、中間件、計算機(jī)底層、架構(gòu)設(shè)計演進(jìn)與穩(wěn)定性建設(shè)優(yōu)化,文章內(nèi)容兼具廣度、深度、大廠技術(shù)方案,對待技術(shù)喜歡推理加驗證,就職于知名金融公司后端高級工程師。 ? ? ? ?? ?? 熱衷分享,喜歡原

    2024年02月03日
    瀏覽(20)
  • 【數(shù)據(jù)挖掘從入門到實戰(zhàn)】——專欄導(dǎo)讀

    【數(shù)據(jù)挖掘從入門到實戰(zhàn)】——專欄導(dǎo)讀

    目錄 1、專欄大綱 ??基礎(chǔ)部分 ??實戰(zhàn)部分 ??競賽部分 2、代碼附錄 數(shù)據(jù)挖掘?qū)?,包含基本?數(shù)據(jù)挖掘算法分析和實戰(zhàn),數(shù)據(jù)挖掘競賽干貨分享 等。數(shù)據(jù)挖掘是從大規(guī)模數(shù)據(jù)集中發(fā)現(xiàn)隱藏模式、關(guān)聯(lián)和知識的過程。它結(jié)合了統(tǒng)計學(xué)、人工智能和數(shù)據(jù)庫系統(tǒng)等領(lǐng)域的技術(shù)和

    2024年02月13日
    瀏覽(22)
  • 【JavaSE專欄90】用最簡單的方法,使用 JDBC 連接 MySQL 數(shù)據(jù)庫

    【JavaSE專欄90】用最簡單的方法,使用 JDBC 連接 MySQL 數(shù)據(jù)庫

    作者主頁 :Designer 小鄭 作者簡介 :3年JAVA全棧開發(fā)經(jīng)驗,專注JAVA技術(shù)、系統(tǒng)定制、遠(yuǎn)程指導(dǎo),致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN學(xué)院、藍(lán)橋云課認(rèn)證講師。 主打方向 :Vue、SpringBoot、微信小程序 本文講解了如何使用 JDBC 連接 MySQL 數(shù)據(jù)庫,并給出了樣例代碼。JDBC 是 Java 語言訪問

    2024年02月11日
    瀏覽(25)
  • Mysql數(shù)據(jù)庫(五) Mysql命令行客戶端:內(nèi)連接查詢、左連接查詢、右連接查詢、自連接查詢、子查詢

    Mysql數(shù)據(jù)庫(五) Mysql命令行客戶端:內(nèi)連接查詢、左連接查詢、右連接查詢、自連接查詢、子查詢

    目錄 一、 連接查詢 對多個表進(jìn)行查詢 1.0 數(shù)據(jù)準(zhǔn)備 1.1 連接查詢 1.2 內(nèi)連接?INNER JOIN 1.3 左連接?LEFT JOIN 1.4 右連接?RIGHT JOIN 1.5 FULL OUTER JOIN 1.6 自連接查詢 1.7 子查詢-嵌套在查詢中 在之前的文章當(dāng)中,我們在 base_1 當(dāng)中有了一個 stu 表,記錄的是學(xué)生的name age height等信息 第一步

    2024年02月13日
    瀏覽(24)
  • ⑧【MySQL】數(shù)據(jù)庫查詢:內(nèi)連接、外連接、自連接、子查詢、多表查詢

    ⑧【MySQL】數(shù)據(jù)庫查詢:內(nèi)連接、外連接、自連接、子查詢、多表查詢

    個人簡介:Java領(lǐng)域新星創(chuàng)作者;阿里云技術(shù)博主、星級博主、專家博主;正在Java學(xué)習(xí)的路上摸爬滾打,記錄學(xué)習(xí)的過程~ 個人主頁:.29.的博客 學(xué)習(xí)社區(qū):進(jìn)去逛一逛~ 多表關(guān)系 : 一對一 :在 任意一方 加入外鍵,關(guān)聯(lián)另一方的主鍵,并設(shè)置外鍵為唯一(UNIQUE)。 一對多(

    2024年02月05日
    瀏覽(23)
  • 連接查詢(多表查詢)——MySQL

    連接查詢(多表查詢)——MySQL

    又稱多表查詢,當(dāng) 查詢的字段涉及多個表 的時候,就要用到連接查詢 分類: 為表起別名: 提高語句的簡潔度 區(qū)分多個重名字段 注意 :如果為表起了別名,則查詢的字段就 不能使用原來的別名去限定 查詢A、B 交集部分?jǐn)?shù)據(jù) 語法: 隱式內(nèi)連接 select 字段列表 from 表1,表

    2024年02月04日
    瀏覽(23)
  • 【MySQL系列】MySQL復(fù)合查詢的學(xué)習(xí) _ 多表查詢 | 自連接 | 子查詢 | 合并查詢

    【MySQL系列】MySQL復(fù)合查詢的學(xué)習(xí) _ 多表查詢 | 自連接 | 子查詢 | 合并查詢

    「前言」文章內(nèi)容大致是對MySQL復(fù)合查詢的學(xué)習(xí)。 「歸屬專欄」MySQL 「主頁鏈接」個人主頁 「筆者」楓葉先生(fy) 前面篇章講解的mysql表的查詢都是對一張表進(jìn)行查詢,在實際開發(fā)中這遠(yuǎn)遠(yuǎn)不夠,下面將講解復(fù)合查詢,首先回顧一下基本的查詢。 使用的數(shù)據(jù)庫是之前篇章的雇

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包