B+ 樹結構,存儲「索引值 → 數據行指針」映射。無索引全表掃描,有索引直接定位。1000 行表索引查找比全掃快 100 倍+。
| 類型 | 建立方式 | 特點 |
|---|---|---|
| 普通 | CREATE INDEX idx ON t(col)ALTER TABLE t ADD INDEX idx(col)CREATE TABLE t(..., INDEX idx(col)) | 無唯一限制 |
| 唯一 | CREATE UNIQUE INDEX ...ALTER TABLE t ADD UNIQUE idx(col) | 值唯一,寫入自查重 |
| 主鍵 | PRIMARY KEY (col)ALTER TABLE t ADD PRIMARY KEY (col) | 特殊唯一,非空,單表一個 |
| 全文 | FULLTEXT 於 VARCHAR/TEXT | 3.23.23+,大數據用 ALTER TABLE 建索引更快 |
CREATE TABLE people ( peopleid SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY, firstname CHAR(50), lastname CHAR(50), age SMALLINT, townid SMALLINT );
查詢:WHERE firstname='Mike' AND lastname='Sullivan' AND age=17
INDEX(firstname):先縮小到 Mike,再掃描過濾 lastname/age,仍掃描大量中間行INDEX(firstname, lastname, age):B+ 樹直接定位到唯一目標行,零掃描INDEX(firstname, lastname, age) -- 可服務: firstname, lastname, age firstname, lastname firstname -- 不可服務: lastname age lastname, age
firstname、lastnametownidage、town.name 無需索引<, <=, =, >=, BETWEEN, IN, LIKE('prefix%') 走索引;LIKE('%suffix') 不走EXPLAIN 驗證)EXPLAIN 定期巡檢