首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 索引深度解析:從 B+Tree 原理到多列索引最左前綴、覆蓋索引與選擇性計算

     編輯:MySQL 資料庫相關知識

索引本質:B+Tree 有序數據結構

InnoDB 聚簇索引 (主鍵) 葉子節點存 **完整行數據**;二級索引葉子節點存 **主鍵值**,查詢需「回表」查聚簇索引。MyISAM 索引葉子節點存 **數據文件指針**。

索引類型全景

類型關鍵字約束適用場景
主鍵PRIMARY KEY唯一、非空、單表唯一業務主鍵/自增代理鍵
唯一UNIQUE唯一、可空業務自然鍵 (手機、身份證、Email)
普通INDEX / KEY無約束高選擇性查詢列、JOIN 列、排序列
全文FULLTEXT5.6+ InnoDB 支援長文本搜尋 (文章、日志、評論)
空間SPATIALGIS 數據類型地理位置查詢
前綴INDEX(col(N))索引前 N 字符長 VARCHAR/TEXT/BLOB,N 取選擇性 > 0.9 處
組合INDEX(a,b,c)多列有序WHERE a=1 AND b=2 / ORDER BY a,b
覆蓋無特殊語法查詢列 ⊆ 索引列避免回表,Extra=Using index

單列 vs 多列索引:為什麼組合索引更強?


-- 單列索引各自建立
INDEX idx_fn (firstname), INDEX idx_ln (lastname), INDEX idx_age (age)
-- 查詢:WHERE firstname='Mike' AND lastname='Sullivan' AND age=17
-- 優化器只能選擇 **一個** 最佳單列索引 (如 firstname),掃描所有 Mike 再過濾

-- 組合索引
INDEX idx_fn_ln_age (firstname, lastname, age)
-- B+Tree 按 (firstname, lastname, age) 有序存儲
-- 直接定位到 firstname='Mike' → lastname='Sullivan' → age=17,**零掃描、零回表**

最左前綴原理 (Leftmost Prefix)

組合索引 INDEX(a,b,c) 等價於同時擁有:

  • INDEX(a)
  • INDEX(a,b)
  • INDEX(a,b,c)

可用場景:WHERE a=1、WHERE a=1 AND b=2、WHERE a=1 AND b=2 AND c=3、ORDER BY a,b、GROUP BY a,b。
不可用場景:WHERE b=1、WHERE c=1、WHERE b=1 AND c=2、WHERE a=1 AND c=3 (跳過 b)。

選擇索引列:WHERE/JOIN 列優先,SELECT 列次之


-- 只在 WHERE/JOIN 出現 → 必建索引
SELECT age FROM people WHERE firstname='Mike' AND lastname='Sullivan';
-- firstname, lastname 建索引;age 無需索引

-- 出現在 JOIN ON 條件 → 必建索引
SELECT p.age, t.name
FROM people p LEFT JOIN town t ON p.townid = t.townid
WHERE p.firstname='Mike';
-- p.firstname, p.townid, t.townid 皆需索引

操作符與索引兼容性

MySQL **僅**對以下操作符使用索引:=、>、>=、<、<=、BETWEEN、IN、LIKE 'prefix%'。
失效:LIKE '%suffix'、LIKE '%mid%'、!=、NOT IN、函數包裹列、隱式轉換。

前綴索引長度科學計算


-- 計算不同前綴長度的選擇性
SELECT
  N,
  COUNT(DISTINCT LEFT(email, N)) / COUNT(*) AS selectivity
FROM users
WHERE email IS NOT NULL
GROUP BY N
HAVING selectivity > 0.9
ORDER BY N LIMIT 1;
-- 結果 N=12 即可達 0.92,建立 INDEX(email(12)) 節省 70% 空間

總結

索引設計是 **「業務查詢模式 → 索引結構 → 選擇性驗證 → 寫入成本核算」** 的閉環決策。掌握 B+Tree 有序性、最左前綴、覆蓋索引、前綴長度計算四大核心概念,配合 EXPLAIN 實測驗證,即可應對 95% 索引優化場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved