MySQL為什么不建議使用多表JOIN

一、典型回答

? 之所以不建議使用JOIN查詢,最主要的原因就是JOIN的效率比較低。

? MySQL是使用了嵌套循環(Nested-Loop Join)的方式實現關聯查詢的,簡單點說就是要通過兩層循環,用第一張表做外循環,第二張表做內循環,外循環的每條記錄跟內循環中的記錄作比較,符合條件的就輸出。

? 而具體到算法實現上主要是simpl nested loop,block nested loop和index nested loop這三種。而且這三種的效率都沒有特別高的。

? MySQL使用了嵌套循環(Nested-Loop Join)的方式來實現關聯查詢的,如果有2張表JOIN的話,復雜度最高是O(n^2),3張表則是O(n^3)...隨著表越多,表中的數據量越多,JOIN的效率會呈指數級下降。

二、JOIN

? 在MySQL中,可以使用JOIN在兩個或多個表中進行聯合查詢,JOIN有三種,分別是INNER?JOIN、LEFT?JOIN、RIGHT?JOIN。

? INNER?JOIN(內連接或等值連接):獲取兩個表中字段匹配關系的記錄,取兩個表的交集部分。

? LEFT?JOIN(左連接):獲取左表左右記錄,即使右表沒有對應匹配的記錄,取兩個表的交集部分+左表中的數據。

? RIGHT?JOIN(右連接):與LEFT?JOIN相反,用戶獲取右表所有記錄,即使左表沒有對應匹配的記錄,取兩個表的交集部分+右表中的數據。

三、嵌套循環算法

? MySQL使用了嵌套循環(Nested-Loop Join)的方法來實現關聯查詢的,simpl nested loop,block nested loop和index nested loop三種。

??simpl nested loop:他的做法簡單粗暴,就是全量掃描連接兩張表進行數據的兩兩對比,所以他的復雜度可以認為是N*M(N是驅動表的數量,M是被驅動表的數量)。

??block nested loop:當inner loop的表用到字段來索引的話,可以用到索引進行查詢數據,因為索引是B+樹的,復雜度可以近似認為是N*logM。

??index nested loop:引入了BUFFER,會提前把外循環的一部分結果放到JOIN BUFFER中然后內循環的每一行都和整體BUFFER的數據作比較,索然比較次數還是N*M,但是因為JOIN BUFFER是基于內存的,所以效率高很多。

? 所以,雖然MySQL已經盡可能的在優化了,但是這幾種算法復雜度還是挺高的,這也是說為什么不建議在數據庫中多表JOIN的原因,隨著表越多,表中的數據量越多,JOIN的效率會呈指數級下降。

四、不能用JOIN如何做關聯查詢

? 如果不能通過數據庫在關聯查詢,那么需要查詢多表數據的時候要怎么做呢?

? 主要有兩種方法:

? ? 1、在內存中自己做關聯,即先從數據庫中把數據查出來之后,在代碼中進行二次查詢,然后再進行關聯。

? ? 2、數據冗余,那就把一些重要的數據在表中做冗余,這樣就可以避免關聯查詢了。

? ? 3、寬表,就是基于一定的JOIN關系,把數據庫中多張表的數據打平做一張大寬表,可以同步到ES或者干脆直接在數據庫中直接查出來。

參考:Hollis

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

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

相關文章

大模型課程資料-全網最火29套全棧大模型項目實踐

29套AI全棧大模型項目實戰,人工智能視頻課程-多模態大模型,微調技術訓練營,大模型多場景實戰,AI圖像處理,AI量化投資,OPenCV視覺處理,機器學習,Pytorch深度學習,推薦系統…

【LLM】一分鐘帶你了解Agent工作流四范式

文章目錄 1. 大模型直接生成-generation2. 大模型充當工具使用-tool3. 大模型執行思維鏈-Planning4. 多大模型Agent合作-multiagent collaboration 1. 大模型直接生成-generation 通過提示詞,大模型直接生成想要的結果: 2. 大模型充當工具使用-tool …

無人機在農業方面應用的局限性

無人機在農業方面的應用雖然帶來了許多便利和效率提升,但也存在一些局限性。以下是對這些局限性的清晰歸納和分點表示: 飛行受限: 無人機在飛行過程中受到一定限制,例如在森林、城市等復雜地形或建筑物密集區域,其空間…

擁抱數字化未來,如何以費控驅動業務發展?

管理費用是企業運營中僅次于人力成本的第二大可控成本,一般會占到企業年度收入的5%—10%,但多數企業存在費用疏于管理、費用管理制度流于紙面難落地、費用浪費嚴重等問題。 如果不進行科學管理,有專家表示,估計企業每年至少有10%的…

vue總結

1.什么是VUE? Vue就是一套用于構建用戶界面的漸進式框架,與其他框架不同的是,Vue被設計為可以自底向上逐漸應用.Vue的核心庫只關注圖層,不僅容易上手,還便于與第三方庫或既有項目整合. 2.Vue的優點 體積小 高效率 雙向數據綁定,簡化Dom操作 通過MVVM思想實現數據的雙向綁定…

Pixea Plus for Mac:圖像編輯的極致體驗

Pixea Plus for Mac 是一款專為 Mac 用戶設計的強大圖像編輯軟件。憑借其卓越的性能和豐富的功能,它為用戶帶來了前所未有的圖像編輯體驗。無論是專業的設計師,還是業余的攝影愛好者,Pixea Plus 都能滿足您對于圖像編輯的各種需求。 Pixea P…

瀏覽器擴展V3開發系列之 chrome.cookies 的用法和案例

【作者主頁】:小魚神1024 【擅長領域】:JS逆向、小程序逆向、AST還原、驗證碼突防、Python開發、瀏覽器插件開發、React前端開發、NestJS后端開發等等 chrome.cookies API能夠讓我們在擴展程序中去操作瀏覽器的cookies。 在使用 chrome.cookies 要先聲明…

軟考系統架構師考試考點整理就看這一篇

軟考系統架構師考試考點整理就看這一篇 最近軟考成績出來了不少同學與筆者溝通,聊到軟考現在越來越難了,考了兩三次都沒過,也有不少新同學咨詢軟考考試的一些福利政策,投入大量的物力,財力,精力&#xff0c…

如何借助物聯網實現土壤監測與保護

如何借助物聯網實現土壤監測與保護 高標準農田信息化是指利用現代信息技術,如物聯網、大數據、云計算等,對農田進行數字化、智能化的管理,以提高農田的生產效率和可持續發展能力。其中,土壤監測與保護是農田信息化的重要內容之一…

Vue3中根據select得選項值,改變當前元素同級下的子元素得disabled屬性值

在 Vue 3 中,你通常不會直接通過類名(或任何其他 DOM 選擇器)來獲取 DOM 元素,因為 Vue 鼓勵你使用數據驅動視圖的方式來更新和操作元素。然而,如果你確實需要訪問 DOM 元素(這通常是不推薦的,除非有特別的原因),你可以使用 Vue 3 的 ref 或者 refs(在模板中使用 ref…

Python 入門 —— 面向對象編程

Python 入門 —— 面向對象編程 面向對象編程是一種編程范式,通過將對象作為程序的基本單元,每個對象之間可以相互傳遞信息,并通過各自的方法對信息進行處理,從而達到程序處理的目的。 而面向過程編程則是將程序視為一系列順序執…

低代碼:釋放企業創新力的鑰匙

近年來,隨著信息技術的不斷發展,企業對于快速開發應用程序的需求越來越迫切。然而,傳統的軟件開發過程常常耗時費力,限制了企業的創新潛力。于是,低代碼應運而生,成為解決開發難題的一把利器。 低代碼開發…

你了解RabbitMQ、RocketMQ和Kafka嗎?

是的,我了解 RabbitMQ、RocketMQ 和 Kafka。以下是對這三種消息隊列系統的詳細介紹: RabbitMQ 概念 RabbitMQ 是一個由 Pivotal 開發的開源消息代理,基于 AMQP(Advanced Message Queuing Protocol)協議。它支持多種…

智能聊天AI機器人網頁怎么聊?這樣做很簡單

智能聊天AI機器人網頁怎么聊?隨著科技的飛速發展,智能聊天AI機器人已經逐漸滲透到我們的日常生活中,為我們提供了更加便捷、高效的交流方式。在網頁上,這些智能聊天機器人以其獨特的魅力,為我們打開了與機器對話的新世…

Epic商店登錄時一直轉圈圈怎么回事?Epic登錄轉圈圈解決辦法

很多游戲玩家都喜歡在Epic商店上面免費領取游戲,但是經常在登陸領取的過程中,遇到Epic賬號登陸不上的問題,登陸界面一直轉圈圈,下面分享一下具體解決辦法,幫助大家順利流暢登陸,輕松喜加一。 如果遇到Epic商…

低內阻、高性能數字音頻功放芯片-NTP8938

由工采網代理的韓國NF(耐福)NTP8938是一款支持2X30W低內阻、高性能數字音頻功放芯片;采用QFN40封裝,芯片內置DSP集成了多功能數字音頻信號處理功能,高性能,高保真。 芯片工作電壓范圍:5V&#x…

python實現可視化大屏(django+pyechars)

1.實現效果圖 2.對數據庫進行遷移 python manage.py makemigrations python manage.py migrate 3.登錄頁面 {% load static%} <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport"…

ffmpeg將mp4轉換為swf

文章目錄 ffmpeg安裝、配置java運行報錯 Cannot run program "ffmpeg" ffmpeg命令mp4轉為swf示例 ### ffmpeg -i input.mkv -b:v 600 -c:v libx264 -vf scale1920:1080 -crf 10 -ar 48000 -r 24 output.swfmkv轉為swf示例 其他文檔命令參數簡介 需要將mp4轉換為swf&a…

【回溯算法題記錄】組合總和題匯總

組合總和 39. 組合總和題目描述初始思路后續分析 40. 組合總和 II題目描述思路&#xff08;參考代碼隨想錄&#xff09; 39. 組合總和 題目&#x1f517; 題目描述 給你一個 無重復元素 的整數數組 candidates 和一個目標整數 target &#xff0c;找出 candidates 中可以使數…

3d渲染軟件有哪些(2),渲染100邀請碼1a12

3D渲染軟件有很多&#xff0c;上次我們介紹了幾個&#xff0c;這次我們接著介紹。 1、Arnold Arnold渲染器是一款基于物理算法的電影級渲染引擎&#xff0c;它具有渲染質量高、材質系統豐富、渲染速度快等特點&#xff0c;是3D設計師的極佳選擇。2、Octane Render Octane Ren…