索引
一个**索引(index)**就像一本书后面的索引:它让数据库直接跳到匹配的行,而不必扫描每一行。没有索引,查询会随着数据增长而变慢——在 100 行时还好,在 1,000,000 行时就痛苦了。
实用的指导:
- 为你频繁筛选或连接的列建立索引(例如
author_id、email)。 - 主键会自动建立索引。
- 不要给所有东西都建索引——每个索引都会加速读取,但会拖慢写入并占用空间。
- 当你看到一个慢查询时再添加索引,而不是预先给每一列都加。
弄清楚某个索引到底有没有用的诚实办法,是去问数据库,而不是去猜。每个 SQL 引擎都有 EXPLAIN(在 Postgres 里是 EXPLAIN ANALYZE),它会展示它将采用的计划:
EXPLAIN ANALYZE
SELECT * FROM posts WHERE author_id = '...';
如果在一张大表上输出说 Seq Scan,那就是数据库在读取每一行——一个索引会有帮助的信号。加上一个之后,它应该切换为 Index Scan。这是一个很适合交给 AI 的任务:把慢查询和 EXPLAIN 的输出贴上去,问该加哪个索引以及为什么。你通过理解答案来保持掌控,而不是靠背索引理论。