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

MySQL 索引類型深度解析:INDEX、PRIMARY、UNIQUE、FULLTEXT 差異比較

     編輯:MySQL 綜合教學

MySQL 索引類型深度解析:INDEX、PRIMARY、UNIQUE、FULLTEXT 差異比較

整理自 StackOverflow 高票回答,系統比較 MySQL 四大索引類型的定義、約束差異、適用場景與內部實作機制。

核心差異比較表

索引類型別名唯一性約束空值允許每表數量主要用途
INDEX / KEY普通索引無允許多個加速查詢,無資料約束
UNIQUE唯一索引強制唯一允許 (多個 NULL 視為不相等)多個業務鍵唯一性 + 查詢加速
PRIMARY主鍵索引強制唯一 + NOT NULL不允許僅一個實體識別鍵,InnoDB 叢集索引基礎
FULLTEXT全文索引不適用允許多個全文搜尋 (MATCH...AGAINST)

詳細特性說明

INDEX (普通索引)

  • 不強制任何資料約束,純為查詢效能
  • 允許重複值與 NULL 值
  • 底層通常為 B+ Tree

UNIQUE (唯一索引)

  • 所有索引欄位組合必須唯一 (非單欄唯一)
  • 可包含 NULL,多筆 NULL 視為不違反唯一性 (NULL ≠ NULL)
  • 插入/更新時資料庫自動檢查,違反則報錯
  • 若需禁止 NULL,請額外加 NOT NULL 約束

PRIMARY (主鍵索引)

  • 語義上是表的「主識別鍵」
  • 隱含 UNIQUE + NOT NULL
  • 每表僅能有一個,慣例命名為 PRIMARY
  • InnoDB 中主鍵即叢集索引,資料按主鍵物理排序儲存
  • 建議使用單欄自增整數或業務上天然唯一且短小的欄位

FULLTEXT (全文索引)

  • 專門支援 MATCH(col) AGAINST('keyword') 全文搜尋
  • 不支援一般比較運算子 (=, >, LIKE 等)
  • MySQL 5.6+ InnoDB 支援,早期僅 MyISAM
  • 僅適用於 CHAR、VARCHAR、TEXT 類型
  • 建立時會產生額外系統表、獨立快取機制,開銷較大

共同特性

  • 皆可為複合索引 (多欄位)
  • 除 FULLTEXT 外,欄位順序極重要:查詢必須從最左欄位開始匹配 (最左前綴原則)
  • FULLTEXT 查詢需包含索引中所有欄位才生效

實務選擇指南

  1. 業務主鍵 → PRIMARY KEY
  2. 業務唯一鍵 (如 Email、身分證) → UNIQUE
  3. 頻繁查詢/聯結/排序欄位 → INDEX
  4. 大文本欄位需關鍵字搜尋 → FULLTEXT
  5. 複合索引設計遵循:高選擇性、高頻率、小寬度欄位優先靠左

補充:二級索引隱含主鍵值

InnoDB 二級索引葉節點存儲主鍵值而非物理位址,「回表」查詢時先查二級索引得主鍵,再查叢集索引得完整行。這意味著:

  • 主鍵越短,二級索引越小,效能越好
  • 覆蓋索引可避免回表,大幅提升查詢速度
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved