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

MySQL 索引深度解析與優化實戰(上):B-Tree 原理、索引類型與最左前綴法則

     編輯:MySQL 資料庫相關知識

什麼是索引?

索引是資料庫快速定位特定值記錄的關鍵結構。MySQL 所有索引均以 B-Tree 形式存儲。無索引時需全表掃描,資料量越大代價越高;有索引則可直接定位目標行。對 1000 行資料,索引查找至少比順序掃描快 100 倍。

索引類型總覽

類型特點建立方式
普通索引無唯一性限制,最基礎CREATE INDEX / ALTER TABLE / CREATE TABLE
唯一索引值不可重複CREATE UNIQUE INDEX / ALTER TABLE / CREATE TABLE
主鍵特殊唯一索引,名為 PRIMARY KEY,每表僅一個CREATE TABLE / ALTER TABLE
全文索引支援 VARCHAR/TEXT 全文搜尋,類型 FULLTEXTCREATE TABLE / ALTER TABLE / CREATE INDEX

單列 vs 多列索引:效能天壤之別

建立多列索引 INDEX fname_lname_age (firstname, lastname, age),MySQL 可依序在 B-Tree 中定位三個欄位,無需掃描資料行。

若改建三個單列索引,MySQL 單次查詢只能使用一個索引,會選擇「限制最嚴格」者,但其過濾能力遠弱於多列索引的組合過濾。

最左前綴原則

多列索引 (a, b, c) 等價於同時擁有 (a,b,c)、(a,b)、(a) 三個索引。以下查詢均可用到該索引:

  • WHERE a=1 AND b=2 AND c=3
  • WHERE a=1 AND b=2
  • WHERE a=1

但 WHERE b=2 或 WHERE c=3 無法使用,因未包含最左列 a。

實戰建議

  1. 高選擇性欄位優先放入索引最左側
  2. 避免在索引列上使用函數/運算(導致索引失效)
  3. 覆蓋索引:查詢欄位全包含於索引中,避免回表
  4. 定期 `ANALYZE TABLE` 更新統計資訊,助優化器決策
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved