MySQL 索引

索引为什么快、怎么建、什么时候失效。

Beginner
Key Points索引是排好序的查找结构(B+ 树),让查询从全表扫描变成几步定位。

建索引

SQL
CREATE INDEX idx_username ON users(username);
CREATE UNIQUE INDEX uk_email ON users(email);
-- 联合索引
CREATE INDEX idx_age_name ON users(age, username);
Output
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

什么时候用不上索引

  • 对列做函数/运算:WHERE YEAR(created_at)=2026
  • 前模糊:LIKE '%abc'
  • 隐式类型转换:WHERE phone = 13800000000(phone 是字符串)
  • 联合索引不遵守最左前缀:idx(a,b) 却只查 b

最左前缀原则

A composite index (age, username) sorts by age first, then username. WHERE age=? and WHERE age=? AND username=? use it, but WHERE username=? alone cannot — matching must start from the leftmost column.

More indexes is not better: each slows writes and costs space. Index the columns in hot WHERE/JOIN/ORDER BY, and verify with EXPLAIN.

Friends & Partners