Mysql join語句

join 語句用于實現多表查詢。

Index Nested-Loop Join

select * from a join b on a.id=b.id。對于兩張表 a 和 b,Mysql 優化器會選擇其中一張表執行全表掃描,稱為驅動表。對于驅動表每一數據行,在被驅動表查詢數據,將結果組合返回數據集。
假設驅動表行數是M,則時間復雜度為 M。
對于每一行,在 N 行被驅動表的非聚簇索引和局促索引各搜索一次。則時間復雜度為 M * 2 * log2(N)。
兩者相加 M + M * 2 * log2(N)。可以看出應選擇小表執行全表掃描,即作驅動表。這種使用索引的 join 語句稱為 Index Nested-Loop Join(NLJ) ,性能不錯。

Block Nested-Loop Join

如果被驅動表用不上索引,那么時間復雜度就是 M * N。mysql 對于這種 join 語句也有優化,稱為 Block Nested-Loop Join。具體操作是:兩張表都是全表掃描,用一塊內存區域 join_buffer 存儲其中一張表(驅動表)所有行的所選字段。掃描另一張表(被驅動表),與 Join_buffer 數據對比,滿足則存入結果集。在內存執行 M * N 次操作比在磁盤執行 M * N 次操作快。

如果 join_buffer 不夠大,放不下驅動表所有數據。則分段存放(這就是 Block Nested-Loop Join 中 Block 的含義)。多次將驅動表的不同數據存入 join_buffer,再全表掃描被驅動表。為了降低 join_buffer 替換次數,選擇結果集更小的表作為驅動表。比如:表 a 有 30 行,查詢 3 個 int 字段,表b 有 10 行,查詢 10 個 int 字段。此時就應該選擇 a 表。
優化方案可以是:增加 join_buffer 空間。

Batched Key Access

Multi-Range Read

之前我們提及回表:在非聚簇索引查到主鍵 id,再到聚簇索引查詢數據行。如果在非聚簇索引查詢大量 id,Mysql 提供 Multi-Range Read 機制優化回表。它將非聚簇索引查詢到到的 id 集合在內存區域 read_rnd_buffer 排序并且按順序在聚簇索引查詢數據行。這樣可以將隨機訪問變為順序訪問,提升讀性能。

Index Nested-Loop Join 的優化

Index Nested-Loop Join 的被驅動表也有回表,Batched Key Access = Index Nested-Loop Join + Multi-Range Read。
具體來說:用 join_buffer 批量緩存驅動表的數據,在被驅動表回表查詢時利用 MRR 提升讀性能。

Block Nested-Loop Join 的優化

如果某些 join 查詢使用頻率很低,或者 where 條件過濾后表的數據行非常少,那么不適合建立索引。

但是不建立索引,時間復雜度 M * N。此時可以用臨時表,在臨時表為字段建立索引,將 Block Nested-Loop Join 變為 Index Nested-Loop Join

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93954.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93954.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93954.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring AI 系列之三十 - Spring AI Alibaba-其它模型

之前做個幾個大模型的應用,都是使用Python語言,后來有一個項目使用了Java,并使用了Spring AI框架。隨著Spring AI不斷地完善,最近它發布了1.0正式版,意味著它已經能很好的作為企業級生產環境的使用。對于Java開發者來說…

【Flutter3.8x】flutter從入門到實戰基礎教程(五):Material Icons圖標的使用

flutter給我們內置準備了很多圖標,這些圖標可以使我們在沒有設計師的前提下,也能做出自己滿意的app icon網站 https://material.io/tools/icons/進入網站后,點擊我們需要的圖標,然后滑動找到flutter的tab選項,就可以看…

算法訓練營day38 動態規劃⑥ 322. 零錢兌換、279.完全平方數、139.單詞拆分、多重背包

動態規劃的第六篇!背包問題總結篇! 322. 零錢兌換 題目中說每種硬幣的數量是無限的,可以看出是典型的完全背包問題。但是如何找最小的“組合”呢?(通過dp數組的不同定義 與 遞推公式) 確定dp數組以及下標的…

vue+element 實現下拉框共享options

背景 用戶的需求總是多樣的,這不用戶想做個下拉連選,每選一個基金,下方表格多一行,選擇對應的重要性,任務;問題 其他都好弄,任務是遠程搜索,選擇人的單選下拉,如果每個下…

centos服務器安裝minio

1.創建目錄和下載文件 #創建相關文件夾 mkdir -p /home/minio mkdir -p /home/minio/bin mkdir -p /home/minio/data#進入上面創建的bin目錄下 cd /home/minio/bin#下載minio(最新版minio無法通過頁面的控制臺配置accesskey建議選擇2024年的版本操作) ht…

【云故事探索】NO.16:阿里云彈性計算加速精準學 AI 教育普惠落地

智能精準學寒雪老師 X 阿里云彈性計算:以堅實算力底座,實現 AI 一對一教育普惠的愿景 【導語】 當全球首個 K12 教育超級智能體“寒雪老師”在深夜為萬千學子答疑解惑,支撐其流暢互動的,是阿里云彈性計算 15 年淬煉的堅實算力底座…

forge篇——配置

從這篇文章開始,我們開始研究forge代碼,以下是forge源代碼和代碼解析 ForgeConfigSpec 類詳細解析 ForgeConfigSpec 是 Minecraft Forge 模組開發中的核心配置類,基于 NightConfig 庫實現,提供了類型安全、驗證和自動糾正功能。以下是關鍵部分的詳細解釋: 1. 類定義與基…

全新發布|知影-API風險監測系統V3.3,AI賦能定義數據接口安全新坐標

7月31日,全知科技「知影-API風險監測系統V3.3」版本正式上線。在版本發布直播中,全知科技資深產品經理裴向南系統講解了V3.3版本的核心亮點、能力升級與后續產品規劃方向。作為全知科技自主研發的核心產品,「知影-API風險監測系統」自2017年起…

動作捕捉技術重塑具身智能開發:高效訓練與精準控制的新范式

具身智能(Embodied AI)是指智能體通過與環境交互實現感知、學習和決策的能力,其核心在于模擬人類或生物的形態與行為。具身智能的發展意義在于突破傳統AI的局限性,使機器能夠適應復雜多變的真實場景,從而在工業制造、醫…

【Andriod Studio】勾選不了Android SDK,提示unavailable

首先,直接說結論——網絡(代理)有問題 先看第一個文章里面說的,https://blog.csdn.net/weixin_53485880/article/details/128200878 要確定自己沒有開啟代理(就是Set proxy里選cancel),安裝SDK…

數據結構與算法——字典(前綴)樹的實現

參考視頻&#xff1a;左程云--算法講解044【必備】前綴樹原理和代碼詳解 類實現&#xff1a; class Trie {private:class TrieNode {public:int pass;int end;vector<TrieNode*> nexts;TrieNode(): pass(0), end(0), nexts(26, nullptr) {}};TrieNode* root; // 根指針…

STORM代碼閱讀筆記

默認的 分辨率是 [160,240] &#xff0c;基于 Transformer 的方法不能做高分辨率。 Dataloader 輸入是 帶有 pose 信息的 RGB 圖像 eval datasets ## 采樣幀數目 20 num_max_future_frames int(self.timespan * fps) ## 每次間隔多少個時間 timesteps 取一個context image n…

2025電賽G題-發揮部分-參數自適應FIR濾波器

&#xff08;1&#xff09;測評現場提供由RLC元件&#xff08;各1個&#xff09;組成的“未知模型電路”。 按照圖3所示&#xff0c;探究裝置連接該電路的輸入和輸出端口&#xff0c;對該電路進行 自主學習、建模&#xff08;不可借助外部測試設備&#xff09;&#xff0c;2分鐘…

Linux基礎 -- 內核快速向用戶態共享內核變量方案之ctl_table

系統化、可直接上手的 /proc/sys sysctl 接口使用文檔。內容涵蓋&#xff1a;機制原理、適用場景、ctl_table 字段詳解、常用解析器&#xff08;proc_handler&#xff09;完整清單與選型、最小樣例到進階&#xff08;范圍校驗、毫秒→jiffies、字符串、數組、每網絡命名空間&a…

【RH124知識點問答題】第3章 從命令行管理文件

1. 怎么理解“Linux中一切皆文件”&#xff1f;Linux是如何組織文件的&#xff1f;&#xff08;1&#xff09;“Linux中一切皆文件”的理解和文件組織&#xff1a;在Linux中&#xff0c;“一切皆文件”指的是Linux將各種設備、目錄、文件等都視為文件對象進行管理。這種統一的文…

練習javaweb+mysql+jsp

只是簡單的使用mysql、簡單的練習。 有很多待完善的地方&#xff0c;比如list的servlet頁面&#xff0c;應該判斷有沒有用戶的。 比如list.jsp 應該循環list而不是寫死 index.jsp 樣式可以再優化一下的。比如按鈕就特丑。 本文展示了一個簡單的MySQL數據庫操作練習項目&#x…

使用Nginx部署前端項目

使用Nginx部署前端項目 一、總述二、具體步驟 2.1解壓2.2將原來的html文件夾的文件刪除&#xff0c;將自己的靜態資源文件放進去&#xff0c;點擊nginx.exe文件啟動項目2.3查看進程中是否有ngix的兩個進程在瀏覽器中輸入“localhost:端口號”即可訪問。 2.4端口被占用情況處理 …

【論文學習】KAG論文翻譯

文章目錄KAG: Boosting LLMs in Professional Domains via Knowledge Augmented Generation摘要1 引言2 方法論2.1 LLM友好型知識表示2.2 互索引機制2.2.1 語義分塊2.2.2 帶豐富語境的的信息抽取2.2.3 領域知識注入與約束2.2.4 文本塊向量與知識結構的相互索引2.3 邏輯形式求解…

24黑馬SpringCloud安裝MybatisPlus插件相關問題解決

目錄 一、前言 二、菜單欄沒有Other 三、Config Database里的dburl需要加上時區等配置 一、前言 在學習24黑馬SpringCloud的MybatisPlus-12.拓展功能-代碼生成器課程時&#xff0c;發現由于IDEA版本不同以及MybatisPlus版本更新會出現與視頻不一致的相關問題&#xff0c;本博…

人工智能賦能聚合物及復合材料模型應用與實踐

近年來&#xff0c;生成式人工智能&#xff08;包括大語言模型、分子生成模型等&#xff09;在聚合物及復合材料領域掀起革命性浪潮&#xff0c;其依托數據驅動與機理協同&#xff0c;從海量數據中挖掘構效關系、通過分子結構表示&#xff08;如 SMILES、BigSMILES&#xff09;…