Skip to content

Latest commit

 

History

History
63 lines (43 loc) · 1.88 KB

File metadata and controls

63 lines (43 loc) · 1.88 KB

索引简介

索引可以理解为帮助数据库快速定位数据的“目录”。如果没有索引,MySQL 在查询某些数据时可能需要从头到尾扫描整张表;有了合适的索引后,就可以更快定位目标记录。

索引的含义和特点

索引的核心作用是提高查询效率,尤其是在以下场景中效果明显:

  • WHERE 条件筛选
  • JOIN 关联查询
  • ORDER BY 排序
  • GROUP BY 分组

索引的典型特点有:

  1. 能显著提高查询速度。
  2. 会占用额外存储空间。
  3. 会增加插入、更新、删除时的维护成本。

也就是说,索引不是越多越好,而是应该根据查询场景来建立。

索引的分类

MySQL 中常见索引包括:

  • 主键索引(PRIMARY KEY
  • 唯一索引(UNIQUE
  • 普通索引(INDEX
  • 全文索引(FULLTEXT
  • 组合索引(多个字段共同组成)

例如:

  • 主键索引用于唯一标识记录
  • 唯一索引用于保证某列值不重复
  • 普通索引用于加速一般查询
  • 全文索引用于文本检索
  • 组合索引用于多个字段联合查询

索引的设计原则

设计索引时通常遵循以下原则:

  1. 优先为高频查询字段建立索引。
  2. 常出现在 WHEREJOINORDER BY 中的字段更值得建索引。
  3. 区分度高的字段更适合建立索引。
  4. 不要给很少查询、频繁更新的字段随意加索引。
  5. 能用组合索引解决问题时,不一定要拆成多个单列索引。

例如下面这类查询:

SELECT *
FROM mytable
WHERE city = '上海' AND age = 20;

如果这类查询非常频繁,就可以考虑给 cityage,或者 (city, age) 建立索引。

小结

索引的本质是用空间换时间。它能明显提升查询性能,但也会增加写入成本。是否建索引,关键不在于“能不能建”,而在于“值不值得建”。