MySQL索引、B+樹相關知識總結

在這里插入圖片描述


MySQL索引、B+樹相關知識匯總

  • 一、有一個查詢需求,MySQL中有兩個表,一個表1000W數據,另一個表只有幾千數據,要做一個關聯查詢,如何優化?
    • 1、為關聯字段建立索引
    • 2、小表驅動大表
  • 二、b樹和b+樹的區別
    • 1、更高的查詢效率
    • 2、更高的空間利用率
    • 3、查詢效率更穩定
  • 三、innodb使用數據頁存儲數據?默認數據頁大小16K,我現在有一張表,有2kw數據,我這個b+樹的高度有幾層?
  • 四、redis為什么快?
    • 1、基于內存的數據存儲
    • 2、單線程模型
    • 3、IO多路復用
    • 4、高效的數據結構
  • 五、建立聯合索引(a,b,c),where c = 5是否會用到索引?為什么?

一、有一個查詢需求,MySQL中有兩個表,一個表1000W數據,另一個表只有幾千數據,要做一個關聯查詢,如何優化?

如果 orders 表是大表(比如 1000 萬條記錄),而 users 表是相對較小的表(比如幾千條記錄)。

1、為關聯字段建立索引

確保兩個表中用于 JOIN 操作的字段都有索引。這是最基本的優化策略,避免數據庫進行全表掃描,可以大幅度減少查找匹配行的時間。

2、小表驅動大表

在執行 JOIN 操作時,先過濾小表中的數據,這樣可以減少后續與大表進行 JOIN 時需要處理的數據量,從而提高查詢效率。

二、b樹和b+樹的區別

B+ 樹相比較 B 樹,有這些優勢:

1、更高的查詢效率

B+樹的所有值(數據記錄或指向數據記錄的指針)都存在于葉子節點,并且葉子節點之間通過指針連接,形成一個有序鏈表。

這種結構使得 B+樹非常適合進行范圍查詢,一旦到達了范圍的開始位置,接下來的元素可以通過遍歷葉子節點的鏈表順序訪問,而不需要回到樹的上層。如 SQL 中的 ORDER BY 和 BETWEEN 查詢。

而 B 樹的數據分布在整個樹中,進行范圍查詢時可能需要遍歷樹的多個層級。

2、更高的空間利用率

在 B+樹中,非葉子節點不存儲數據,只存儲鍵值,這意味著非葉子節點可以擁有更多的鍵,從而有更多的分叉。
這導致樹的高度更低,進一步降低了查詢時磁盤 I/O 的次數,因為每一次從一個節點到另一個節點的跳轉都可能涉及到磁盤 I/O 操作。

3、查詢效率更穩定

B+樹中所有葉子節點深度相同,所有數據查詢路徑長度相等,保證了每次搜索的性能穩定性。而在 B 樹中,數據可以存儲在內部節點,不同的查詢可能需要不同深度的搜索。

三、innodb使用數據頁存儲數據?默認數據頁大小16K,我現在有一張表,有2kw數據,我這個b+樹的高度有幾層?

在 MySQL 中,InnoDB 存儲引擎的最小存儲單元是頁,默認大小是16k
如果有 2KW 條數據,那么這顆 B+樹的高度為 3 層。

四、redis為什么快?

1、基于內存的數據存儲

Redis 將數據存儲在內存當中,使得數據的讀寫操作避開了磁盤 I/O。而內存的訪問速度遠超硬盤,這是 Redis 讀寫速度快的根本原因。

2、單線程模型

Redis 使用單線程模型來處理客戶端的請求,這意味著在任何時刻只有一個命令在執行。這樣就避免了線程切換和鎖競爭帶來的消耗。

3、IO多路復用

Redis 單個線程處理多個 IO 讀寫的請求。

4、高效的數據結構

Redis 提供了多種高效的數據結構,如字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)等,這些數據結構經過了高度優化,能夠支持快速的數據操作。

五、建立聯合索引(a,b,c),where c = 5是否會用到索引?為什么?

在這個查詢中,只有索引的第三列 c 被用作查詢條件,而前兩列 a 和 b 沒有被使用。這不符合最左前綴原則,因此 MySQL 不會使用聯合索引 (a,b,c)。

1、對empname,deptid,jobs3列建立索引語句:

create index idx_t1_bcd on employees(empname,deptid,jobs)

2、EXPLAIN select * from employees where jobs=“測試經理” ,沒有使用索引
在這里插入圖片描述
3、EXPLAIN select * from employees where deptid=“1003” ,沒有使用索引
在這里插入圖片描述
4、EXPLAIN select * from employees where empname=“張飛” 使用了索引
在這里插入圖片描述
5、EXPLAIN select * from employees where jobs=“測試” and deptid=“1002”
沒有使用索引

6、EXPLAIN select * from employees where jobs=“測試” or deptid=“1002”
沒有使用索引
在這里插入圖片描述
7、EXPLAIN select * from employees where deptid=“1002” and jobs=“測試” and empname=“張飛” 使用了索引
在這里插入圖片描述

8、EXPLAIN select * from employees where deptid=“1002” or jobs=“測試” or empname=“張飛” 不使用索引

在這里插入圖片描述

9、EXPLAIN select * from employees where deptid=“1002” and jobs=“測試” and empname LIKE “%飛”;不使用索引
在這里插入圖片描述

10、EXPLAIN select * from employees where deptid LIKE “%002” and jobs=“測試” and empname = “張飛”;使用了索引
在這里插入圖片描述

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

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

相關文章

Java學習進階 -- 泛型的繼承和通配符及綜合練習

首先&#xff0c;泛型不具備繼承性&#xff0c;但是數據具備繼承性1.核心概念解析泛型不具備繼承性即使類型A是類型B的子類&#xff0c;Generic<A>也不是Generic<B>的子類這是Java泛型的類型安全設計&#xff0c;防止不安全的類型轉換數據具備繼承性泛型容器中的元…

如何實現在多跳UDP傳輸場景,保證單文件和多文件完整傳輸的成功率?

如何實現在多跳UDP傳輸場景&#xff0c;保證單文件和多文件完整傳輸的成功率&#xff1f; 一、前言 UDP&#xff08;User Datagram Protocol&#xff09;是一個輕量、無連接的傳輸協議&#xff0c;廣泛用于低延遲、高吞吐的應用中&#xff0c;如視頻流、實時游戲等。然而&…

【Spring IoC 核心實現類詳解:DefaultListableBeanFactory】

Spring IoC 核心實現類詳解&#xff08;源碼原理&#xff09;作為 Spring 的靈魂&#xff0c;IoC 容器&#xff08;Inversion of Control&#xff09;是整個框架的核心。 那么 IoC 的“心臟”到底是哪個類&#xff1f;它是怎么管理和裝配 Bean 的&#xff1f;本文將從源碼層面深…

為什么開啟JWT全局認證后,CSRF失敗會消失?

這是因為 JWT認證與CSRF校驗的設計邏輯完全不同&#xff0c;當全局啟用JWT認證后&#xff0c;Django的CSRF校驗會被“繞過”或不再生效&#xff0c;具體原因如下&#xff1a; 核心原因&#xff1a;JWT認證不依賴Cookie&#xff0c;無需CSRF保護 1. CSRF的作用場景 CSRF攻擊的前…

寶龍地產債務化解解決方案二:基于資產代幣化與輕資產轉型的戰略重構

一、行業背景與代幣化創新趨勢1.1 房地產債務危機現狀寶龍地產&#xff08;01238.HK&#xff09;截至2024年中債務總額達584億元&#xff0c;其中50.7%為一年內到期債務&#xff0c;但現金儲備僅89.47億元&#xff0c;短期償債覆蓋率不足30%。2025年2月境外債務重組計劃因債權人…

深信服GO面試題及參考答案(下)

Kubernetes 與容器 Kubernetes(簡稱 K8s)是容器編排平臺,而容器是輕量級的虛擬化技術,兩者緊密關聯但定位不同,容器是 K8s 管理的核心對象,K8s 為容器提供了完整的生命周期管理、擴展和運維能力。 容器技術(如 Docker)通過 Linux 命名空間(Namespace)、控制組(CGro…

RAGFoundry:面向檢索增強生成的模塊化增強框架

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 1. 背景與動機 大型語言模型&#xff08;LLMs&#xff09;存在 知識靜…

(第十期)HTML基礎教程:文檔類型聲明與字符編碼詳解

&#xff08;第十期&#xff09;HTML基礎教程&#xff1a;文檔類型聲明與字符編碼詳解 前言 在使用VS Code等現代編輯器生成HTML頁面時&#xff0c;你會發現自動生成的代碼中多了一些看似陌生但又非常重要的標簽。這些標簽不是多余的&#xff0c;而是現代Web開發的標準配置。…

OpenAPI(Swagger3)接口文檔自定義排序(萬能大法,支持任意swagger版本)

前置參考文檔 基于OpenAPI(Swagger3)使用AOP技術&#xff0c;進行日志記錄 使用SpringAOP的方式修改controller接口返回的數據 SpringBoot3集成OpenAPI3(解決Boot2升級Boot3) 總結一句話&#xff1a;既然沒辦法去通過各種方法或者官方的接口去修改接口順序&#xff0c;那我們就…

vue3上傳的文件在線查看

1、npm install vue-office/pdf vue-demi 安裝依賴2、npm install vue-office/excel vue-demi 安裝依賴3、npm install vue-office/docx vue-demi 安裝依賴4、編寫一個通用組件&#xff0c;現在只支持 .docx,.xlsx,.pdf 格式的文件&#xff0c;其他文件渲染不成功<temp…

深度學習中基于響應的模型知識蒸餾實現示例

在 https://blog.csdn.net/fengbingchun/article/details/149878692 中介紹了深度學習中的模型知識蒸餾&#xff0c;這里通過已訓練的DenseNet分類模型&#xff0c;基于響應的知識蒸餾實現通過教師模型生成學生模型&#xff1a; 1. 依賴的模塊如下所示&#xff1a; import arg…

【數據可視化-82】中國城市幸福指數可視化分析:Python + PyEcharts 打造炫酷城市幸福指數可視化大屏

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

TikTok網頁版訪問障礙破解:IP限制到高效運營的全流程指南

在跨境電商與社媒運營的數字化浪潮中&#xff0c;TikTok網頁版因其多賬號管理便捷性、內容采集高效性等優勢&#xff0c;成為從業者的核心工具&#xff0c;然而“頁面空白”“地區不支持” 等訪問問題卻頻繁困擾用戶。一、TikTok網頁版的核心應用場景與技術特性&#xff08;一&…

spring的知識點:容器、AOP、事物

一、Spring 是什么? Spring 是一個開源的 Java 企業級應用框架,它的核心目標是簡化 Java 開發。 它不是單一的工具,而是一個 “生態系統”,包含了很多模塊(如 Spring Core、Spring Boot、Spring MVC 等),可以解決開發中的各種問題(如對象管理、Web 開發、事務控制等)…

HTML ISO-8859-1:深入解析字符編碼標準

HTML ISO-8859-1:深入解析字符編碼標準 引言 在HTML文檔中,字符編碼的選擇對于確保網頁內容的正確顯示至關重要。ISO-8859-1是一種廣泛使用的字符編碼標準,它定義了256個字符,覆蓋了大多數西歐語言。本文將深入探討HTML ISO-8859-1的原理、應用及其在現代網頁開發中的重要…

【計算機網絡 | 第4篇】分組交換

文章目錄前言&#x1f95d;電路交換&#x1f34b;電路交換技術的優缺點電路交換的資源分配機制報文交換&#x1f34b;報文交換技術的優缺點存儲轉發技術分組交換&#x1f426;?&#x1f525;分組交換的過程分組交換解決的關鍵問題傳輸過程的關鍵參數工作原理分組傳輸時延計算網…

LLM - AI大模型應用集成協議三件套 MCP、A2A與AG-UI

文章目錄1. 引言&#xff1a;背景與三協議概覽2. MCP&#xff08;Model Context Protocol&#xff09;起源與動因架構與規范要點開發實踐3. A2A&#xff08;Agent-to-Agent Protocol&#xff09;起源與動因架構與規范要點開發實踐4. AG-UI&#xff08;Agent-User Interaction P…

機器學習DBSCAN密度聚類

引言 在機器學習的聚類任務中&#xff0c;K-means因其簡單高效廣為人知&#xff0c;但它有一個致命缺陷——假設簇是球形且密度均勻&#xff0c;且需要預先指定簇數。當數據存在任意形狀的簇、噪聲點或密度差異較大時&#xff0c;K-means的表現往往不盡如人意。這時候&#xff…

RecyclerView 緩存機制

一、四級緩存體系1. Scrap 緩存&#xff08;臨時緩存&#xff09;位置&#xff1a;mAttachedScrap 和 mChangedScrap作用&#xff1a;存儲當前屏幕可見但被標記為移除的 ViewHolder用于局部刷新&#xff08;如 notifyItemChanged()&#xff09;特點&#xff1a;生命周期短&…

大模型SSE流式輸出技術

文章目錄背景&#xff1a;為什么需要流式輸出SSE 流式輸出很多廠商還是小 chunk背景&#xff1a;為什么需要流式輸出 大模型的響應通常很長&#xff0c;比如幾百甚至幾千個 token&#xff0c;如果等模型一次性生成完才返回&#xff1a; 延遲高&#xff1a;用戶要等很久才能看…