索引是 B+ 樹結構,能將全表掃描降為對數級查找。本文詳細講解普通/唯一/主鍵/全文索引、單列 vs 多列索引、最左前綴原理、WHERE/JOIN 條件列選擇索引、比較操作符對索引使用的影響。
CREATE INDEX idx_name ON t(col)CREATE UNIQUE INDEX ...PRIMARY KEY (col),隱含 NOT NULL + UNIQUE。FULLTEXT,僅 VARCHAR/TEXT,3.23.23+ 支援。表 people(id, firstname, lastname, age, townid),查詢 firstname='Mike' AND lastname='Sullivan' AND age=17。
單列索引僅能縮小至 firstname='Mike' 再回表過濾;
多列索引 (firstname, lastname, age) 可一次定位目標行,無需回表。
多列索引 (a,b,c) 等價於同時擁有 (a)、(a,b)、(a,b,c) 索引。
可用於:WHERE a=1、WHERE a=1 AND b=2、WHERE a=1 AND b=2 AND c=3。
不可用於:WHERE b=2、WHERE c=3、WHERE b=2 AND c=3。
WHERE、JOIN ON、GROUP BY、ORDER BY 的列。=, >, >=, <, <=, BETWEEN, IN, LIKE 'prefix%' 可用索引;LIKE '%suffix'、函數運算、!= 導致全掃。