MySQL索引詳解(上)(結構/分類/語法篇)

一、索引概述

索引本質是幫助MySQL高效獲取數據的排序數據結構(類似書籍目錄),通過減少磁盤I/O次數提升查詢效率。其核心價值體現在大數據量場景下的快速定位能力,但同時帶來存儲和維護成本。

核心特點

  • 優點
    • 減少數據檢索量(時間復雜度從O(n)降至O(log n))
    • 加速排序和分組操作(ORDER BY/GROUP BY)
    • 保證數據唯一性(唯一索引)
  • 缺點
    • 占用額外磁盤空間(索引文件獨立存儲)
    • 降低寫操作性能(INSERT/UPDATE/DELETE需維護索引樹)
    • 不恰當的索引設計可能引發性能劣化
二、索引結構
1.?B+Tree(主流結構)
  • 層級結構:非葉子節點僅存索引鍵(Key),葉子節點存儲數據指針且形成雙向鏈表 。
  • 優勢
    • 樹高可控(一般3-4層支撐千萬級數據)
    • 范圍查詢高效(葉子節點鏈表直接遍歷)
    • 適合磁盤存儲(節點大小=磁盤頁大小,減少I/O)
2.?Hash索引
  • 基于哈希表實現,O(1)時間復雜度的等值查詢 。
  • 局限性
    • 不支持范圍查詢和排序
    • 哈希沖突影響性能(鏈表或紅黑樹處理)
    • 僅Memory引擎原生支持,InnoDB提供自適應哈希(AHI)
3.?全文索引(Full-Text)
  • 基于倒排索引實現,針對TEXT類型字段進行關鍵詞搜索 。
  • 支持自然語言查詢(MATCH...AGAINST語法)
  • 僅InnoDB/MyISAM引擎支持
三、索引分類
按數據結構劃分
類型特點適用場景
B+Tree支持范圍查詢、排序,磁盤友好90%以上的索引場景
Hash等值查詢極快,不支持范圍操作內存表、精確匹配場景
Fulltext文本關鍵詞搜索文章內容檢索
按物理存儲劃分
類型特點示例
聚集索引數據行存儲在葉子節點(InnoDB主鍵索引)PRIMARY KEY
非聚集索引葉子節點存儲主鍵值或數據地址,需二次查找普通單列/組合索引
按字段特性劃分
類型特點語法示例
主鍵索引唯一且非空,InnoDB的表數據按主鍵順序存儲PRIMARY KEY (id)
唯一索引列值唯一,允許NULLUNIQUE INDEX (email)
普通索引無唯一性約束,加速查詢INDEX (name)
全文索引文本內容分詞檢索FULLTEXT (content)
按字段數量劃分
類型特點優化規則
單列索引單字段索引INDEX (age)
聯合索引多字段組合索引,遵循最左前綴原則INDEX (name,age)

特殊類型

  • 覆蓋索引:索引包含查詢所需全部字段,避免回表?
    ?(如SELECT id,name FROM users WHERE name='A',若索引是(name,id)
  • 前綴索引:對長字符串前N字符創建索引,節省空間?
    (如INDEX (title(10))
四、索引語法
1. 通用操作
-- 創建索引 
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name (col1 [ASC|DESC], ...); 
-- 修改表添加索引 
ALTER TABLE table_name ADD [UNIQUE|FULLTEXT] INDEX index_name (col1, ...); 
-- 刪除索引 
DROP INDEX index_name ON table_name;
2. 分類示例

主鍵索引

-- 建表時指定 
CREATE TABLE users (
id INT AUTO_INCREMENT, 
name VARCHAR(50), 
PRIMARY KEY (id) -- 聚集索引 ); 
-- 修改添加 
ALTER TABLE orders ADD PRIMARY KEY (
order_id);

聯合索引

-- 優化多條件查詢 
CREATE INDEX idx_name_age ON employees (
last_name, hire_date);

全文索引

-- 支持文本搜索 
CREATE FULLTEXT INDEX ft_content ON articles (content); 
SELECT * FROM articles WHERE MATCH(content) AGAINST('數據庫');

前綴索引

-- 長字段優化 
CREATE INDEX idx_city_prefix ON customers (city(10));
五、設計原則
  1. 高頻查詢字段優先(WHERE/JOIN/ORDER BY)
  2. 區分度高字段前置(如性別字段不宜單獨建索引)
  3. 避免過度索引(超過5個索引需謹慎評估)
  4. 聯合索引左前綴匹配INDEX(a,b,c)適用a=1 AND b>2,不適用b>2
  5. 長文本使用前綴/全文索引

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

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

相關文章

數據集-目標檢測系列- 煙霧 檢測數據集 smoke >> DataBall

數據集-目標檢測系列- 消防 濃煙 檢測數據集 smoke>> DataBall 數據集-目標檢測系列- 煙霧 檢測數據集 smoke >> DataBall * 相關項目 1)數據集可視化項目:gitcode: https://gitcode.com/DataBall/DataBall-detections-10…

docker + K3S + Jenkins + Harbor自動化部署

最近公司在研究自動化部署的一套流程,下面記錄一下配置流程 需要提前準備好Jenkins Harbor Git(其他管理工具也可以) 我這里的打包編譯流程是Jenkins上配置打包任務-->自動到git目錄下找打包文件---->項目編譯后打鏡像包------>打完鏡像包將鏡像上傳到…

《用MATLAB玩轉游戲開發:從零開始打造你的數字樂園》基礎篇(2D圖形交互)-《打磚塊:向量反射與實時物理模擬》MATLAB教程

《用MATLAB玩轉游戲開發:從零開始打造你的數字樂園》基礎篇(2D圖形交互)-《打磚塊:向量反射與實時物理模擬》MATLAB教程 🎮 文章目錄 《用MATLAB玩轉游戲開發:從零開始打造你的數字樂園》基礎篇&#xff08…

Redisson 看門狗機制

何為看門狗 看門狗機制的主要作用是自動續期鎖,確保在節點完成任務之前,鎖不會過期。具體來說,當一個節點獲取到鎖后,看門狗會定期檢查該鎖的過期時間,并在必要時延長鎖的過期時間,確保節點可以順利完成任…

[架構之美]linux常見故障問題解決方案(十九)

[架構之美]linux下常見故障問題解決方案 一,文本文件忙 問題一:rootwh-VMware-Virtual-Platform:/home/hail# cp /root/containerd/bin/* /usr/bin/ cp: 無法創建普通文件 ‘/usr/bin/containerd’: 文本文件忙 在Linux系統中遇到“文本文件忙”錯誤時…

QT實現曲線圖縮放、拖拽以及框選放大

.h文件 protected: void saveAxisRange();void wheelEvent(QWheelEvent *event) override;void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;private:QPoint m_…

【Pandas】pandas DataFrame corr

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每個元素的絕對值DataFrame.all([axis, bool_only, skipna])用于判斷 DataFrame 中是否所有元素在指定軸上都為 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判斷…

青藏高原七大河流源區徑流深、蒸散發數據集(TPRED)

時間分辨率 月空間分辨率 1km - 10km共享方式 開放獲取數據大小 83.27 MB數據時間范圍 1998-07-01 — 2017-12-31元數據更新時間 2024-07-22 數據集摘要 通過構建耦合積雪、凍土、冰川等冰凍圈水文物理過程的WEB-DHM模型(Water and Energy Budget-based Distribute…

window環境下,如何通過USB接口控制打印機

雖然說大多數情況下,我們可以非常便利的通過打印機驅動來控制打印機,但還是有一些特殊情況,導致無法通過打印機驅動來完成我們預想的任務,比如,打印機只是一個系統設備中的一部分,需要協調其它設備一起工作…

CDGP數據治理主觀題評分標準與得分策略

1.數據模型題目評分標準 1)準確理解題目中所描述的業務邏輯和需求得[1分] 2)正確使用模型設計方法,使用信息工程、信息建模集成定義、巴克符號、陳氏符號等其中一種得[1分] 3)正確設計實體和屬性,題目中涉及的實體數量為25-30個,10個以內得[2分],10-20個得[3分],25個…

工業設計破局密碼:3D 可視化技術點燃產業升級引擎

3D可視化是一種將數據、信息或抽象概念以三維圖形、模型和動畫的形式呈現出來的技術。3D可視化技術通過構建三維數字孿生體,將設計思維轉化為可交互的虛擬原型,不僅打破了傳統二維設計的空間局限,更在效率、精度與用戶體驗層面開創了全新維度…

Qt中在子線程中刷新UI的方法

Qt中在子線程中刷新UI的方法 在Qt中UI界面并不是線程安全的,意味著在子線程中不能隨意操作UI界面組件(比如按鈕、標簽)等,如果強行操作這些組件有可能會導致程序崩潰。那么在Qt中如何在子線程中刷新UI控件呢? 兩種方…

為了摸魚和吃瓜,我開發了一個網站

平時上班真的比較累,摸魚和吃瓜還要跳轉多個平臺的話,就累上加累了。 所以做了一個聚合了全網主流平臺熱搜的網站。 目前市面上確實有很多這種網站了,所以目前最主要有兩點和他們不同: 給熱搜列表增加了配圖,刷的時候…

操作系統學習筆記第2章 (竟成)

第 2 章 進程管理 【考綱內容】 1.進程與線程: (1) 進程 / 線程的基本概念; (2) 進程 / 線程的狀態與轉換; (3) 線程的實現:內核支持的線程;線程庫支持的線程; (4) 進程與線程的組織與控制; (5)…

77.評論日記

房間要經常搞衛生,不然會很多灰,很多頭發,很多垃圾。 當然,即使一直搞衛生,在一些看不到的角落也是會慢慢囤積垃圾。 想要把那些角落也打掃干凈,沒別的辦法,只有把那個角落上所有的東西都移開&a…

語音合成之十二 TTS聲學編解碼器的演進

TTS聲學編解碼器的演進 1 引言:聲碼器/聲學編解碼器在現代TTS中的關鍵作用2 奠定基石:從早期聲碼器到神經合成的曙光3. HiFi-GAN: 革新高效高保真波形生成4. 新的疆域:面向富語義TTS的先進聲學編解碼器5. XCodec2.0: 統一聲學與語義信息6.BiC…

大學之大:悉尼科技大學2025.5.10

悉尼科技大學:從技術先驅到全球創新樞紐的百年征程 一、歷史沿革:從技工培訓到世界百強名校的蛻變 1. 工業革命的技術火種(1843-1945) 悉尼科技大學的歷史可追溯至1843年成立的悉尼機械學院(Sydney Mechanics’ Scho…

安裝阿里云的yum源并且下載軟件(CentOS7版本)

目錄 1. 進入root模式: 2. 進入yum.repos.d文件下 3.備份 4. 安裝阿里云的yum源 5. 安裝dnf 6. 安裝epel-release 7. 清除緩存,并新建緩存 8. 安裝智能拼音軟件包 8.1安裝 8.2 進入應用程序 -- 系統工具 -- 設置 8.3重啟后就可以打中文啦~ (需要重新啟動才能)…

Discriminative and domain invariant subspace alignment for visual tasks

用于視覺任務的判別性和域不變子空間對齊 作者:Samaneh Rezaei,Jafar Tahmoresnezhad 文章于2018年12月4日收到,2019年5月24日被接受,2019年6月3日在線發表于Iran Journal of Computer Science期刊,DOI: 10.1007/s42…

用jsp簡單實現C語言標準化測試系統

C語言標準化測試系統 在Web編程技術的學習過程中,我們小組為了深入理解相關技術原理,提升實踐能力,開發了一個基于動態Web工程框架的C語言標準化考試系統。現在,就來和大家分享一下我們的項目經歷。 一、實驗目的剖析 這個項目…