索引可以理解为帮助数据库快速定位数据的“目录”。如果没有索引,MySQL 在查询某些数据时可能需要从头到尾扫描整张表;有了合适的索引后,就可以更快定位目标记录。
索引的核心作用是提高查询效率,尤其是在以下场景中效果明显:
WHERE 条件筛选JOIN 关联查询ORDER BY 排序GROUP BY 分组索引的典型特点有:
也就是说,索引不是越多越好,而是应该根据查询场景来建立。
MySQL 中常见索引包括:
PRIMARY KEY)UNIQUE)INDEX)FULLTEXT)例如:
设计索引时通常遵循以下原则:
WHERE、JOIN、ORDER BY 中的字段更值得建索引。例如下面这类查询:
SELECT *
FROM mytable
WHERE city = '上海' AND age = 20;
如果这类查询非常频繁,就可以考虑给 city、age,或者 (city, age) 建立索引。
索引的本质是用空间换时间。它能明显提升查询性能,但也会增加写入成本。是否建索引,关键不在于“能不能建”,而在于“值不值得建”。