Java面試八股之MySQL索引B+樹、全文索引、哈希索引

  1. MySQL索引B+樹、全文索引、哈希索引

注意:B+樹中B不是代表二叉樹(binary),而是代表平衡(balance),因為B+樹是從最早的平衡二叉樹演化而來,但是B+樹不是一個二叉樹。

B+樹的高度一般在2~4層,因此每次查詢最多只需要2~4次IO。

1.?B+樹索引(BTREE)

特點:

B+樹是一種自平衡的多路搜索樹,它是一種高度平衡的結構,保證從根節點到任意葉子節點的路徑長度幾乎相等,從而保證了查詢效率相對穩定。

B+樹索引的所有數據都存儲在葉子節點,并且葉子節點之間通過雙向鏈表連接,形成了一個有序的數據集合。

支持范圍查詢、排序和分組操作,因為葉子節點是有序排列的。

可以是單列索引或多列索引(復合索引),并遵循最左前綴匹配原則,即在查詢時,如果查詢條件包含了復合索引的最左邊部分列,就能利用索引進行高效查詢。

適用于大部分查詢場景,特別是等值查詢、范圍查詢以及基于索引列的排序和分組。

優點:

查詢效率較高,尤其是對于范圍查詢和有序結果集的獲取。

能夠處理大量數據,因為B+樹的高度較低,即使數據量很大,查詢深度也不會過高。

缺點:

對于非常小的數據集,建立和維護B+樹索引可能比直接全表掃描更耗時。

對于等值查詢,如果鍵值分布不均勻導致哈希沖突較少,哈希索引可能更快。

2.?全文索引

特點:

全文索引主要用于對文本類型的字段(如VARCHAR、TEXT)進行全文本搜索,能夠處理復雜的查詢條件,如包含某個詞語或短語、近似匹配、詞干提取等。

MySQL的全文索引通常基于倒排索引實現,即為每個單詞建立一個索引項,記錄下包含該單詞的所有文檔(在數據庫中對應為記錄)的列表及位置信息。

通常用于大型文本數據的全文檢索,如博客文章、產品描述、文獻資料等。

優點:

非常適合進行復雜文本內容的模糊查詢和關鍵詞搜索。

提供了對文本數據的高效過濾能力,顯著減少針對文本字段進行LIKE '%keyword%'這類操作時的全表掃描。

缺點:

創建和維護全文索引需要消耗額外的空間和時間資源。

索引更新時有延遲,對于實時性要求較高的場景可能不合適(可通過手動刷新解決)。

對查詢語法有一定要求,需要使用MATCH AGAINST語句,而非普通的WHERE子句。

對于短詞、停用詞(如“的”、“是”等常見詞匯)的處理可能不夠精確,可能需要配合語言分析器和定制化配置。

3.?哈希索引(HASH)

特點:

哈希索引基于哈希表實現,通過哈希函數將鍵值轉換為固定長度的哈希值,然后通過哈希值直接定位到對應的記錄。

主要適用于等值查詢,查詢效率極高,只需一次哈希計算即可找到相應記錄(假設沒有哈希沖突)。

不支持范圍查詢、排序和分組操作,因為哈希索引并不保持鍵值的有序性。

對于鍵值唯一性高的列(如唯一標識符),哈希索引效果尤為出色。

通常用于內存型存儲引擎(如MEMORY引擎)或者InnoDB引擎的自適應哈希索引(Adaptive Hash Index,AHI)。

優點:

等值查詢性能極高,尤其在鍵值分布均勻且唯一性強的情況下。

查找時間復雜度接近O(1),在理想情況下能提供極快的查詢速度。

缺點:

只適用于等值查詢,無法處理范圍查詢、排序和分組。

如果鍵值分布不均導致哈希沖突較多,性能會下降,尤其是在存在大量重復鍵值的情況下。

不支持部分索引列的匹配(如復合索引的部分列查詢)。

哈希索引不存儲原始鍵值,只存儲哈希值和行指針,因此不能避免對數據行的訪問來獲取完整數據。

?如果大家需要視頻版本的講解,歡迎關注我的B站:

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

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

相關文章

es是如何處理索引數據的變動的?

1 概述 es是如何處理索引數據的變動的? 或者說索引數據變動時,es會執行哪些操作? refresh、fsync、merge 和 flush 操作有何作用? es是如何確保即使es發生宕機數據也不丟失的? 在回答上述問題前,可以先…

文件操作和IO流

前言👀~ 上一章我們介紹了多線程進階的相關內容,今天來介紹使用java代碼對文件的一些操作 文件(file) 文件路徑(Path) 文件類型 文件操作 文件系統操作(File類) 文件內容的讀…

leetcode--恢復二叉搜索樹

leetcode地址:恢復二叉搜索樹 給你二叉搜索樹的根節點 root ,該樹中的 恰好 兩個節點的值被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹 。 示例 1: 輸入:root [1,3,null,null,2] 輸出:[3,1,null…

AirPods Pro新功能前瞻:iOS 18的五大創新亮點

隨著科技的不斷進步,蘋果公司一直在探索如何通過創新提升用戶體驗。iOS 18的推出,不僅僅是iPhone的一次系統更新,更是蘋果生態鏈中重要一環——AirPods Pro的一次重大升級。 據悉,iOS 18將為AirPods Pro帶來五項新功能&#xff0…

設計模式探索:觀察者模式

1. 觀察者模式 1.1 什么是觀察者模式 觀察者模式用于建立一種對象與對象之間的依賴關系,當一個對象發生改變時將自動通知其他對象,其他對象會相應地作出反應。 在觀察者模式中有如下角色: Subject(抽象主題/被觀察者&#xf…

【大模型】大規模部署LLM:挑戰與對策

大規模部署LLM:挑戰與對策 引言一、計算資源的挑戰1.1 計算成本1.2 能源消耗與碳足跡 二、維護與更新的挑戰2.1 模型更新與版本控制2.2 知識時效性 三、數據隱私與倫理考量3.1 數據隱私保護3.2 倫理與偏見 四、可擴展性與靈活性4.1 系統架構設計4.2 多語言與地域適應…

詳細分析@FunctionalInterface的基本知識(附Demo)

目錄 前言1. 基本知識2. Demo 前言 Java的基本知識推薦閱讀: java框架 零基礎從入門到精通的學習路線 附開源項目面經等(超全)Spring框架從入門到學精(全) 1. 基本知識 FunctionalInterface 是 Java 8 引入的一個注…

外賣商城平臺小程序的設計

管理員賬戶功能包括:系統首頁,個人中心,用戶管理,商家管理,騎手管理,商品類型管理,商品信息管理,訂單信息管理 微信端賬號功能包括:系統首頁,商品信息&#…

【AI資訊早報】AI科技前沿資訊概覽:2024年7月10日早報

AI科技前沿資訊概覽,涵蓋了行業大會、技術創新、應用場景、行業動態等多個方面,全面展現了AI領域的最新發展動態和未來趨勢。 一、人工智能大模型引領新業態 在2024年(第二十三屆)中國互聯網大會上,中國工程院院士鄔賀…

模板初階詳解

目錄 泛型編程函數模板函數模板概念函數模板格式函數模板的原理函數模板的實例化隱式實例化強制類型轉換的疑惑 顯式實例化 模板參數的匹配原則 類模板類模板的定義格式類模板的實例化 感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接 🐒&#x1f41…

微信小程序接口wx.getLocation違規導致封禁解決辦法

1、找到站內信的這個封禁的通知(功能封禁的通知,而不是處理警告的通知) 2、點擊通知會有申訴鏈接,點開申訴鏈接 申訴原因可參考下面的內容: 1.小程序哪些板塊已除去收集地理位置、2.哪些板塊需要收集地理位置、3.詳細…

寶塔內 計劃任務更新遠程主機的時間

很多情況下一些主機無法上網,長此以往有可能讓系統內的時間混亂 ,這是一個很愁人的事情 這里我們找了一個可以通過寶塔的計劃任務或 cron 不斷將本地時間通過ssh登錄,并在登錄狀態下設置時間的方法.找了很多方案都不行 .最終采用了私鑰登錄的方案 1 使用寶塔的計劃任務(可選): …

WindowsMac共享文件夾設置

共享文件夾設置 共享文件夾設置Windows系統設置步驟一:設置共享文件夾步驟二: 訪問共享文件夾 Mac系統中設置共享文件夾步驟一:設置共享文件夾步驟二:訪問共享文件夾 小貼士結論 共享文件夾設置 有時需要在多臺電腦之間共享文件夾&#xff0…

4.MkDocs樣式

學習 Admonitions(警告) - Material for MkDocs (wdk-docs.github.io) 提示 - Material for MkDocs 中文文檔 (llango.com) Buttons(按鈕) - Material for MkDocs (wdk-docs.github.io) 建議去看這些網站,更為詳細。 常用功能 便利貼 ?? 開啟 markdown_ex…

Linux筆記之iftop查看特定IP地址吞吐量

Linux筆記之iftop查看特定IP地址吞吐量 code review! 文章目錄 Linux筆記之iftop查看特定IP地址吞吐量一.iftop安裝與監控二.iftop 界面簡單介紹如何查看單位實時流量的顯示形式控制單位顯示示例 三.數據存儲和傳輸的單位:比特(bit)和字節&…

Gemma2——Google 新開源大型語言模型完整應用指南

0.引言 Gemma 2以前代產品為基礎,提供增強的性能和效率,以及一系列創新功能,使其在研究和實際應用中都具有特別的吸引力。Gemma 2 的與眾不同之處在于,它能夠提供與更大的專有模型相當的性能,但其軟件包專為更廣泛的可…

hdfs大規模數據存儲底層原理詳解(第31天)

系列文章目錄 一、HDFS設計原理 二、HDFS系統架構 三、HDFS關鍵技術 四、HDFS應用實例 五、解決HDFS不能處理小文件詳解問題 文章目錄 系列文章目錄前言一、設計原理二、系統架構三、關鍵技術四、應用實例五、解決HDFS不能處理小文件詳解問題1. 合并小文件2. 優化Hive配置3. 使…

DDR3 SO-DIMM 內存條硬件總結(一)

最近在使用fpga讀寫DDR3,板子上的DDR3有兩種形式與fpga相連,一種是直接用ddr3內存顆粒,另一種是通過內存條的形式與fpga相連。這里我們正好記錄下和ddr3相關的知識,先從DDR3 SO-DIMM 內存條開始。 1.先看內存條的版本 從JEDEC下載…

Mysql練習題目【7月10日更新】

七、Mysql練習題目 https://zhuanlan.zhihu.com/p/38354000 1. 創建表 創建學生表 mysql> create table if not exists student(-> student_id varchar(255) not null,-> student_name varchar(255) not null,-> birthday date not null,-> gender varchar(…

前端面試題33(實時消息傳輸)

前端實時傳輸協議主要用于實現實時數據交換,特別是在Web應用中,它們讓開發者能夠構建具有實時功能的應用,如聊天、在線協作、游戲等。以下是幾種常見的前端實時傳輸協議的講解: 1. Short Polling (短輪詢) 原理:客戶…