索引是特殊檔案(InnoDB 中屬表空間一部分),包含資料表所有記錄的引用指標。索引非萬能:加速查詢但降低寫入效能;佔用磁碟空間;MySQL 單表最多 16 個索引。
InnoDB 中索引不僅用於查詢,更是行級鎖定的基礎。鎖定發生在索引上而非資料表本身,故無適當索引則無法行級鎖定,影響 SELECT ... LOCK IN SHARE MODE、SELECT ... FOR UPDATE、INSERT/UPDATE/DELETE 等操作。
!= 或 <>DAY(column) = ...)LIKE '%abc' 以萬用字元開頭KEY 或 INDEXUNIQUEPRIMARY KEYINDEX(colA, colB, colC)colA、(colA, colB) 索引,但不可單獨作為 colB、colC 或 (colB, colC) 索引MATCH ... AGAINST 語法ALTER TABLE t ADD FULLTEXT(col1, col2)僅在資料量超過記憶體時測試才有參考價值。關鍵欄位:
type:system > const > eq_ref > ref > range > index > ALLpossible_keys / key:可用/實際使用的索引key_len:使用索引長度(越小越快)rows:預估掃描行數Extra:Using temporary、Using filesort 等警示