数据库索引

数据库索引通过额外维护有序或可定位的数据结构来降低查询成本,但会带来写入和维护开销。

#type / concept #status / growing #tech / dev / backend #resource / database

[!info] related notes

数据库索引

一句话定义

索引是数据库为加速查找而额外维护的数据结构,本质上是“用空间换时间”。

核心机制 / 工作原理

如果没有索引,数据库常常只能做全表扫描;有了索引后,可以更快定位:

  • 精确匹配
  • 范围查询
  • 排序
  • 某些连接条件

常见索引结构:

  • B-Tree:最常见,支持范围查询和排序
  • Hash:适合等值查询,但功能较窄
  • PostgreSQL 扩展索引:如 GIN、GiST、BRIN

索引并不是越多越好,因为:

  • 写入时要同步维护索引
  • 占用额外存储
  • 优化器可能选错,或统计信息过旧

最小例子 / 最小场景

如果经常按邮箱查用户:

CREATE INDEX idx_users_email ON users(email);

那么:

SELECT *
FROM users
WHERE email = 'alice@example.com';

通常就比全表扫描更容易走索引。

边界与易混淆点

  • 索引不是语法糖,它会改变存储结构和写入成本。
  • 有索引不代表一定会用到,是否使用取决于查询条件、选择性和优化器判断。
  • 单列索引和联合索引的适用场景不同,排序列与过滤列的顺序也会影响效果。
创建于 2026/5/3 更新于 2026/5/27