索引是資料庫快速定位特定值記錄的關鍵結構。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 全文搜尋,類型 FULLTEXT | CREATE TABLE / ALTER TABLE / CREATE INDEX |
建立多列索引 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=3WHERE a=1 AND b=2WHERE a=1但 WHERE b=2 或 WHERE c=3 無法使用,因未包含最左列 a。