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

MySQL 索引學習與優化:類型、語法、原則、全文索引實戰

     編輯:MySQL 綜合教學

MySQL 索引學習與優化:類型、語法、原則、全文索引實戰

索引是查詢加速器,也是寫入負擔。本文系統梳理索引定義、五大類型、創建刪除語法、使用原則、全文索引中文難點與最佳實踐。

一、索引本質與代價

  • 本質:數據的「目錄」,B+ 樹結構,將無序數據變為有序查找
  • 收益:查詢 O(N) → O(log N)
  • 代價:
    — 寫入 (INSERT/UPDATE/DELETE) 需維護索引樹,變慢
    — 存儲空間:索引文件甚至超過數據文件(MyISAM .MYI / InnoDB .ibd)

案例:15 列表、10 個索引、500 萬行 → 大量導入時先刪索引、導數據、再建索引。

二、索引算法複雜度對比

三、五大索引類型與語法

算法查找次數 (N=100萬)特點
全表掃描N/2 = 50萬無索引
二叉樹log₂N ≈ 20平衡時最優,易退化鏈表
B+ 樹 (MySQL)logₘN ≈ 3-4多路平衡、葉子鏈表支援範圍查詢、磁盤友好
HashO(1) 理論等值極快,不支援範圍/排序、衝突處理複雜
類型關鍵字特點建表示例
普通索引INDEX / KEY僅加速查詢,允許重複、允許 NULLALTER TABLE t ADD INDEX idx_tel (tel);
唯一索引UNIQUE INDEX值唯一,允許多個 NULLALTER TABLE t ADD UNIQUE INDEX uk_email (email);
主鍵索引PRIMARY KEY唯一+非空,每表僅一個,聚簇索引ALTER TABLE t ADD PRIMARY KEY (id);
全文索引FULLTEXT INDEX支援 MATCH...AGAINST 自然語言/布爾模式搜索ALTER TABLE t ADD FULLTEXT INDEX ft_intro (intro);
組合索引INDEX (a,b,c)最左前綴原則,順序敏感ALTER TABLE t ADD INDEX idx_ab (a,b);

建表時指定索引

CREATE TABLE t (
  id INT PRIMARY KEY AUTO_INCREMENT,
  email VARCHAR(30),
  tel CHAR(11),
  intro TEXT,
  INDEX idx_tel (tel),
  UNIQUE INDEX uk_email (email),
  FULLTEXT INDEX ft_intro (intro)
) ENGINE=MyISAM CHARSET=utf8;

刪除索引

-- 普通/唯一/全文
ALTER TABLE t DROP INDEX idx_tel;

-- 主鍵(若為 AUTO_INCREMENT 需先移除屬性)
ALTER TABLE t MODIFY id INT;  -- 去掉 AUTO_INCREMENT
ALTER TABLE t DROP PRIMARY KEY;

四、索引使用四大原則

  1. 不濫用:只為高頻 WHERE/JOIN/ORDER BY/GROUP BY 列建索引
  2. 高區分度優先:COUNT(DISTINCT col)/COUNT(*) > 0.1(JOIN 列)
  3. 避開低區分度:性別、狀態、布爾值等「基數極小」列不建索引
  4. 最左前綴:組合索引 (a,b,c),查詢必須從 a 開始連續匹配

五、全文索引中文難點與替代方案

  • MySQL 內置全文索引基於「空格/標點分詞」,英文天然分詞,中文無分隔符 → 無法識別中文詞邊界
  • 5.7+ 支援 ngram 解析器(WITH PARSER ngram),按 bigram 切分,勉強可用
  • 生產建議:接入 Elasticsearch / Solr / OpenSearch 等專業搜索引擎,支援中文分詞器、同義詞、評分排序、高亮

六、查看索引結構

SHOW INDEX FROM t;
-- 關鍵列:Key_name, Column_name, Non_unique, Seq_in_index, Cardinality (區分度估值)

SHOW INDEX

七、文件級視角

引擎結構文件數據文件索引文件
MyISAM.frm.MYD.MYI
InnoDB.frm.ibd (含數據+索引)共享表空間 ibdata1 或 .ibd

MyISAM文件 InnoDB文件

總結

索引設計 = 業務查詢模式分析 + 區分度評估 + 寫入性能權衡。定期 ANALYZE TABLE 更新統計信息,配合 EXPLAIN 驗證執行計劃,是索引優化的常態化動作。

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