索引简介 === 索引可以理解为帮助数据库快速定位数据的“目录”。如果没有索引,MySQL 在查询某些数据时可能需要从头到尾扫描整张表;有了合适的索引后,就可以更快定位目标记录。 ### 索引的含义和特点 索引的核心作用是提高查询效率,尤其是在以下场景中效果明显: - `WHERE` 条件筛选 - `JOIN` 关联查询 - `ORDER BY` 排序 - `GROUP BY` 分组 索引的典型特点有: 1. 能显著提高查询速度。 2. 会占用额外存储空间。 3. 会增加插入、更新、删除时的维护成本。 也就是说,索引不是越多越好,而是应该根据查询场景来建立。 ### 索引的分类 MySQL 中常见索引包括: - 主键索引(`PRIMARY KEY`) - 唯一索引(`UNIQUE`) - 普通索引(`INDEX`) - 全文索引(`FULLTEXT`) - 组合索引(多个字段共同组成) 例如: - 主键索引用于唯一标识记录 - 唯一索引用于保证某列值不重复 - 普通索引用于加速一般查询 - 全文索引用于文本检索 - 组合索引用于多个字段联合查询 ### 索引的设计原则 设计索引时通常遵循以下原则: 1. 优先为高频查询字段建立索引。 2. 常出现在 `WHERE`、`JOIN`、`ORDER BY` 中的字段更值得建索引。 3. 区分度高的字段更适合建立索引。 4. 不要给很少查询、频繁更新的字段随意加索引。 5. 能用组合索引解决问题时,不一定要拆成多个单列索引。 例如下面这类查询: ```sql SELECT * FROM mytable WHERE city = '上海' AND age = 20; ``` 如果这类查询非常频繁,就可以考虑给 `city`、`age`,或者 `(city, age)` 建立索引。 ### 小结 索引的本质是用空间换时间。它能明显提升查询性能,但也会增加写入成本。是否建索引,关键不在于“能不能建”,而在于“值不值得建”。