首頁 > 資料庫 > mysql教程 > MySQL Join使用原理是什麼

MySQL Join使用原理是什麼

PHPz
發布: 2023-05-26 10:07:17
轉載
1404 人瀏覽過

    Join的類型

    • left join,以左表為驅動表,以左表作為結果集基礎,連接右表的資料補齊至結果集中

    MySQL Join使用原理是什麼

    • right join,以右表為驅動表,以右表為結果集基礎,連接左表的資料補齊到結果集中

    MySQL Join使用原理是什麼

    • #inner join,結果集取兩個表的交集

    MySQL Join使用原理是什麼

    • full join,結果會集取兩個表的並集

    • mysql沒有full join,union取代

      union與union all的區別為,union會去重

    MySQL Join使用原理是什麼

    #cross join 笛卡爾積
    • 如果不使用where條件則結果集為兩個關聯表行的乘積
    與,的區別為,

    cross join建立結果集時會根據on條件篩選結果集合

    • #straight_join
    • 嚴格依照SQL順序指定磁碟機表,

      左表是驅動

      Join原理

      這句話可以這樣重寫:可以將其本質理解為嵌套循環的運算,其中外層for迴圈驅動表,而內層for迴圈則是被驅動表。根據連接組成資料的策略可以分為三種演算法。
    • Simpe Nested-Loop Join

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

    • Index Nested-Loop Join

      #執行流程(磁碟掃描)
    • 從表t1中讀入一行資料R;
    • 從資料行R中,取出a欄位到表t2裡進行

      樹搜尋查找

      取出表t2中滿足條件的行,跟R組成一行,作為結果集的一部分;
    重複執行步驟1到3,直到表t1的末尾循環結束。

    • 而對於每一行R,根據a字段去表t2查找,走的是樹搜尋過程。

    • Block Nested-Loop Join

    • #mysql使用了一個叫

      join buffe

      r的緩衝區去減少循環次數,這個緩衝區預設是256KB,可以透過指令show variables like 'join_%'查看
    • 其具體的做法是,將第一個表中符合條件的資料列一次查詢到緩衝區中,然後遍歷一次第二個表,並逐一和緩衝區的所有值比較,將比較結果加入結果集中
    #########只有當JOIN類型為ALL, index,rang或是index_merge的時候才會使用join buffer,可以透過explain查看SQL的查詢類型。 ###############Join最佳化############為了最佳化join演算法採用Index nested-loop join演算法,在連線欄位上建立索引欄位## ##########使用資料量小的表去驅動資料量大的表#############增加join buffer size的大小(一次快取的資料越多,那麼外層表格循環的次數就越少)############注意連接欄位的隱含轉換與字元編碼,避免索引失效#########

    以上是MySQL Join使用原理是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    最新問題
    linux安裝mysql報錯
    來自於 1970-01-01 08:00:00
    0
    0
    0
    mysql 升級後無法重新啟動mysql服務的問題
    來自於 1970-01-01 08:00:00
    0
    0
    0
    MySQL停止進程
    來自於 1970-01-01 08:00:00
    0
    0
    0
    phpstudy不能啟動mysql?
    來自於 1970-01-01 08:00:00
    0
    0
    0
    環境中mysql
    來自於 1970-01-01 08:00:00
    0
    0
    0
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板