首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 5.0 索引設計與使用最佳實踐指南

     編輯:MySQL 綜合教學

索引儲存分類

儲存引擎資料與索引儲存方式支援索引類型
MyISAM分離儲存(.MYD/.MYI)B-Tree
InnoDB共享表空間(可多檔案)B-Tree
MEMORY/HEAP記憶體Hash、B-Tree

注意:MySQL 不支援函數索引,但支援**前綴索引**(如 `name(4)`),可大幅縮減索引體積。

MySQL 如何使用索引

核心原則:**查詢條件必須包含索引鍵值**,複合索引遵循**最左前綴原則**。

✅ 會使用索引的場景

  • 複合索引 `(a,b,c)`,查詢條件包含 `a`、`a,b`、`a,b,c`
  • `LIKE 'prefix%'` 固定前綴查詢
  • `col IS NULL`(col 為索引列)
  • 全文索引配合 `MATCH() AGAINST()`

❌ 存在索引但不會使用的場景

  1. 優化器判斷全表掃描更快(如範圍覆蓋 90% 以上資料)
  2. MEMORY/HEAP 表非 `=` 條件
  3. `OR` 連接條件兩側索引不完整
  4. 非索引列第一部分(違反最左前綴)
  5. `LIKE '%suffix'` 以萬用字元開頭
  6. 字串列條件未加引號導致隱式轉換

索引設計黃金法則

  1. 高選擇性優先:唯一值越多(選擇性越高)越適合建索引
  2. 複合索引遵循最左原則:`WHERE a=1 AND b=2` → 索引 `(a,b)`
  3. 覆蓋索引:`SELECT a,b FROM t WHERE c=1` → 索引 `(c,a,b)` 避免回表
  4. 避免過度索引:每個索引增加寫入開銷,單表建議 ≤ 5 個
  5. 前綴索引權衡:長字串取前 N 字元,平衡大小與選擇性

驗證索引效果

EXPLAIN SELECT * FROM t WHERE idx_col = 1;

關鍵欄位解讀:

  • `type`:`const`/`eq_ref`/`ref`/`range`/`index`/`ALL`(由優到劣)
  • `key`:實際使用的索引
  • `rows`:預估掃描行數(越小越好)
  • `Extra`:`Using index`(覆蓋索引)、`Using where`、`Using filesort`(需優化)

狀態變數監控

  • `Handler_read_key` 高 → 索引命中好
  • `Handler_read_rnd_next` 高 → 全表掃描多,需檢查索引或 SQL

總結

索引是資料庫效能的放大器,但也是雙面刃。掌握 B-Tree 原理、最左前綴、覆蓋索引、前綴索引,配合 `EXPLAIN` 持續驗證,才能讓索引真正發揮效能倍增器的作用。

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