MySQL索引面試問題梳理

本文系統剖析MySQL索引的核心機制:

  1. ?索引分類全景圖?:詳解聚簇/非聚簇索引的邏輯差異與物理存儲特點
  2. ?B+樹的統治性優勢?:通過對比Hash/B樹揭示InnoDB的底層選擇邏輯

一、索引分類的常見困惑解析

1. 按物理存儲分類

類型

存儲內容

數量限制

特點

代表引擎

聚簇索引

數據行本身

每表1個

數據即索引

InnoDB主鍵

非聚簇索引

主鍵引用

多個

需回表查詢

MyISAM/InnoDB二級索引

2. 按邏輯功能分類

索引類型

鍵約束

NULL值處理

數量限制

是否聚簇

典型創建語句

適用場景

?主鍵索引?

唯一且非空

禁止NULL

每表1個

是(InnoDB)

ALTER TABLE t ADD PRIMARY KEY(id)

行唯一標識,快速定位

?唯一索引?

唯一但允許NULL

允許NULL

多個

CREATE UNIQUE INDEX idx_name ON t(name)

防止重復值,如手機號

?普通索引?

允許重復值

允許NULL

多個

CREATE INDEX idx_age ON t(age)

加速高頻查詢條件

?全文索引?

無唯一性約束

允許NULL

多個

ALTER TABLE t ADD FULLTEXT(content)

文本內容搜索

?空間索引?

無唯一性約束

禁止NULL

多個

ALTER TABLE t ADD SPATIAL INDEX(pt)

GIS地理坐標查詢

3. 按數據結構分類

類型

數據結構

支持引擎

適用場景

B+Tree索引

平衡多路樹

InnoDB/MyISAM

99%場景

Hash索引

哈希表

Memory引擎

精確匹配

R-Tree索引

空間樹

MyISAM

地理數據

Full-text索引

倒排索引

InnoDB/MyISAM

文本搜索

、InnoDB為何選擇B+樹作為索引結構??

1.常見索引數據結構對比?

在數據庫系統中,不同的索引數據結構適用于不同的查詢場景。以下是幾種主流索引結構的對比:

?數據結構?

?查詢復雜度?

?范圍查詢?

?磁盤I/O效率?

?適用場景?

?代表存儲引擎?

?Hash索引?

O(1)

? 不支持

? 隨機I/O高

精確匹配(如=IN

Memory引擎

?二叉搜索樹?

O(log n)

? 支持

? 樹高不可控

內存型數據

較少使用

?AVL/紅黑樹?

O(log n)

? 支持

? 樹高仍較高

內存型數據

較少使用

?B樹?

O(log n)

? 支持

? 較優

磁盤存儲

MongoDB(B樹變種)

?B+樹?

O(log n)

? 支持

? 最優

磁盤存儲(范圍查詢)

InnoDB、MyISAM

?關鍵結論?

  • ?Hash索引?:僅適合精確查詢,無法支持范圍查詢(如><BETWEEN)。
  • ?二叉/平衡樹?:樹高不可控,導致磁盤I/O次數增加,不適合大規模數據存儲。
  • ?B樹?:相比B+樹,非葉子節點存儲數據,導致單頁存儲的索引鍵減少,樹高可能更高。
  • ?B+樹?:?InnoDB的默認選擇?,具有更穩定的查詢性能、更低樹高、更優的范圍查詢支持。

2. B+樹的核心優勢?

?(1) 更低的樹高,減少磁盤I/O?
  • ?B+樹?的?非葉子節點僅存儲索引鍵?(不存儲數據),因此單頁可容納更多索引項,樹高更低。
(2) 天然支持高效范圍查詢?
  • ?B+樹的所有數據均存儲在葉子節點?,并按順序形成鏈表,范圍查詢只需遍歷葉子節點。
?(3) 更適合磁盤存儲?
  • ?B+樹的葉子節點形成有序鏈表?,減少隨機I/O,提高順序讀取性能(適合機械硬盤)。
  • ?B樹的節點存儲數據?,可能導致更多的隨機I/O。
?(4) 更高的緩存命中率?
  • ?非葉子節點僅存儲索引鍵?,可緩存更多索引結構,減少磁盤訪問。

3. InnoDB為何不選擇Hash/B樹??

?對比項?

?B+樹?

?Hash索引?

?B樹?

?范圍查詢?

? 高效

? 不支持

? 支持但效率較低

?磁盤I/O?

? 順序讀取優化

? 隨機I/O高

? 一般

?樹高控制?

? 最優

? 不適用

?? 比B+樹略高

?緩存友好?

? 非葉子節點可緩存

? 無優化

?? 數據分散

?InnoDB的選擇邏輯?

  1. ?OLTP(在線事務處理)? 需要大量?范圍查詢?(如分頁、排序),B+樹最合適。
  2. ?機械硬盤時代?,B+樹的順序I/O優勢明顯(即使SSD時代仍受益)。
  3. ?B樹的數據存儲方式?導致單頁索引鍵減少,可能增加樹高。

?三、聯合索引失效場景

見我的博客《?MySQL索引失效12種場景:用架構分層思想優化實戰》

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

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

相關文章

SSH密鑰 與 Ed25519密鑰 是什么關系

SSH 密鑰與 Ed25519 密鑰的關系可以從技術實現和應用場景兩個角度理解。簡而言之&#xff1a;Ed25519 密鑰是 SSH 密鑰的一種類型&#xff0c;用于在 SSH 協議中實現安全認證。以下是詳細解釋&#xff1a; 1. SSH 密鑰的通用概念 SSH&#xff08;Secure Shell&#xff09;是一…

【PyTorch 當前版本不支持 NVIDIA GeForce RTX 5060 Ti處理辦法】

報錯信息 X:\Stable-Diffusion-WebUI\system\python\lib\site-packages\torch\cuda\__init__.py:215: UserWarning: NVIDIA GeForce RTX 5060 Ti with CUDA capability sm_120 is not compatible with the current PyTorch installation. The current PyTorch install supports…

Docker部署PaddleX實現PaddleOcr

Docker部署PaddleX實現PaddleOcr 一、版本說明二、安裝PaddleX三、基礎服務化部署四、接口調用實現表格識別五、調參優化一、版本說明 PaddleX 3.0Ubuntu20.04.1Docker version 26.1.3, build 26.1.3-0ubuntu1~20.04.1二、安裝PaddleX 查看服務器信息 docker安裝PaddleX 根據 …

深入學習c++之---AVL樹

VL樹簡介? AVL樹是一種自平衡二叉搜索樹&#xff0c;通過平衡因子&#xff08;Balance Factor, BF&#xff09;?和旋轉操作&#xff0c;確保樹始終保持平衡&#xff0c;避免退化成鏈表&#xff0c;從而保證查找、插入、刪除的時間復雜度穩定在 ?O(log n)?。 ?核心特點?…

【PTA數據結構 | C語言版】輸出 1 ~ n

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 給定正整數 n&#xff0c;輸出 1 ~ n&#xff0c;每個數字占一行。 本題旨在測試不同的算法在各種數據情況下的表現。各組測試數據特點如下&#xff1a; 數據 0&#xff1a;測試基本正確性&#x…

如何禁止用戶復制頁面內容?

某些特定的業務場景下&#xff0c;我們可能會有禁止用戶復制頁面內容的需求。比如&#xff1a; 付費內容保護&#xff1a;在線小說、付費課程等&#xff0c;希望防止內容被輕易拷貝和傳播。試卷或答題系統&#xff1a;防止考生將題目復制出去尋求場外幫助。敏感信息展示&#x…

React + PDF.js 預覽 PDF 文件:從基礎實現到高級優化的完整指南

關鍵點 PDF.js&#xff1a;Mozilla 開發的開源 JavaScript 庫&#xff0c;用于在瀏覽器中渲染 PDF 文件。React 集成&#xff1a;結合 React 組件化特性&#xff0c;實現高效、交互式的 PDF 預覽功能。功能實現&#xff1a;支持 PDF 文件加載、頁面導航、縮放、搜索、書簽和注…

新能源汽車BMS電感產品應用及選型推薦

在新能源電動汽車中&#xff0c;BMS&#xff08;電池管理系統&#xff09;如同一個守護者&#xff0c;默默守護電池的安全與性能。它精準監控電壓、電流、溫度&#xff0c;防止過充過放&#xff0c;并通過智能均衡技術提升續航能力。電感在BMS系統的電源轉換、濾波和隔離通信等…

【機器學習筆記 Ⅱ】12隨機森林

隨機森林&#xff08;Random Forest&#xff09;詳解 隨機森林是一種基于集成學習&#xff08;Ensemble Learning&#xff09;的高性能分類/回歸算法&#xff0c;通過構建多棵決策樹并綜合其預測結果&#xff0c;顯著提升模型的準確性和魯棒性。其核心思想是“集體智慧優于個體…

問題 1:MyBatis-plus-3.5.9 的分頁功能修復

問題 1&#xff1a;MyBatis-plus-3.5.9 的分頁功能修復 使用 Sw?agger 接口文檔?依次對上述接口進行測 試&#xff0c;發現 listU?serVOByPage 接口有一些問題&#xff01; 分頁好像沒有生效&#xff0c;還是查出了全部數據&#xff1a; 由于我們用的是 MyBatis Plus 來操…

Qt 如何提供在線幫助

Qt 如何提供在線幫助一、概述二、工具提示、狀態提示和"Whats This?"幫助1、工具提示(Tool Tips)添加工具提示到控件富文本工具提示全局工具提示設置延遲顯示控制自定義工具提示窗口禁用工具提示工具提示與狀態欄聯動特點&#xff1a;2、狀態提示(Status Tips)3、&q…

Typecho站點關閉插件開發全指南:從原理到實現

文章目錄 開發Typecho站點關閉插件:從原理到實現一、背景與需求分析二、插件設計思路2.1 技術選型2.2 功能模塊設計三、插件開發實現3.1 插件基礎結構3.2 插件主文件實現3.3 核心功能實現3.4 后臺管理界面3.5 關閉頁面模板四、插件配置完善4.1 配置表單實現4.2 定時任務處理五…

詳細解析 .NET 依賴注入的三種生命周期模式

文章目錄一、Transient&#xff08;瞬時生命周期&#xff09;原理使用方式核心特性適用場景優勢劣勢二、Scoped&#xff08;作用域生命周期&#xff09;原理使用方式核心特性適用場景優勢劣勢三、Singleton&#xff08;單例生命周期&#xff09;原理使用方式核心特性適用場景優…

軟件工程經濟與倫理

前言 各位帥哥美女&#xff0c;能看到這篇博客的都有口福了&#xff0c;學習這門課程就像遨游在大份的海洋&#xff0c;一不小心就吃上一口。能看到這篇博客說明我們是有緣人可以點贊收藏一下&#xff0c;這篇博客可以在你無比饑餓的時候給你送上一坨&#xff01;&#xff08;香…

AI 體驗走查 - 火山引擎存儲的 AI UX 探索之路

01 概述 火山引擎存儲技術團隊驅動 AI 自主完成用戶體驗走查 / 可用性測試的執行與評價&#xff0c;幫助業務改善交互體驗。 立項“故事走查”的背景訴求和 AI 機遇 如何搭建“AI 評價”能力&#xff0c;精準識別交互問題 讓交互體驗故事走查變為技術產品&#xff0c;講解系…

【世紀龍科技】汽車零部件檢驗虛擬實訓室-助力汽車職教實訓

在汽車產業加速向電動化、智能化轉型的背景下&#xff0c;職業院校汽車專業教學面臨新的挑戰&#xff1a;傳統實訓受限于設備數量不足、操作風險高、標準化程度低等問題&#xff0c;導致學生實踐機會有限&#xff0c;技能掌握不扎實。如何讓學生在有限資源下高效掌握零部件檢驗…

MySQL常用操作 查看表描述以及表結構、連接數及緩存和性能指標

查看表描述以及表結構查看數據庫名SHOW DATABASES; SELECT DATABASE(); SELECT DATABASE() AS current_database;查看數據庫中表的列表SHOW TABLES; SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA your_database_name; SELECT TABLE_NA…

音視頻學習(三十六):websocket協議總結

概述項目描述標準RFC 6455使用端口默認 80&#xff08;ws&#xff09;&#xff0c;443&#xff08;wss&#xff09;基于協議TCP特性全雙工、低開銷、持久連接、可穿透代理特點 全雙工通信&#xff1a; WebSocket 允許客戶端和服務器之間建立一個持久的連接&#xff0c;并且數據…

docker版本nacos的搭建

1.下載鏡像2.拷貝出容器中對應的配置文件&#xff0c;logs&#xff0c;data&#xff0c;conf3.編寫yaml配置文件version: 3.8 services:nacos-server:image: nacos/nacos-server:v2.4.0container_name: nacos-serverrestart: unless-stoppedports:- "8848:8848" # …

【機器學習深度學習】 如何解決“宏平均偏低 / 小類識別差”的問題?

目錄 &#x1f9e9; 場景 一、先問清楚&#xff1a;小類差&#xff0c;到底差在哪&#xff1f; 二、對癥下藥&#xff1a;六大優化策略&#xff08;分類任務專用&#xff09; ? 1. 處理類別不平衡&#xff08;最常見&#xff09; ? 2. 優化數據質量 ? 3. 更強的模型結…