299 字
1 分钟
PostgreSQL 索引优化实战:从 Explain 到 Index Only Scan

索引不是万能药#

很多开发者遇到慢查询,第一反应就是“加个索引”。但有时候,索引加了反而更慢,或者根本没用上。

读懂 EXPLAIN ANALYZE#

这是 SQL 调优的神器。

EXPLAIN ANALYZE SELECT * FROM users WHERE age > 25;

关注几个关键词:

  • Seq Scan: 全表扫描。如果表很大,这就是灾难。
  • Index Scan: 索引扫描。标准用法。
  • Index Only Scan: 仅索引扫描。这是性能的极致,因为数据直接从索引中获取,无需回表(Heap Fetch)。

什么是 Index Only Scan?#

如果你的查询语句中所有需要的列都在索引里,Postgres 就可以跳过访问数据表,直接返回结果。

优化技巧:使用 INCLUDE 子句。

-- 创建索引时,把常用的查询列(但不是过滤列)放在 INCLUDE 中
CREATE INDEX idx_users_age ON users(age) INCLUDE (username, email);

这样,SELECT username, email FROM users WHERE age > 25 就会触发 Index Only Scan,速度飞快。

维护成本#

别忘了,索引会拖慢 INSERTUPDATE 的速度。每多一个索引,数据库在写入时就要多做一份工作。只为高频查询创建索引,定期清理未使用的索引。

PostgreSQL 索引优化实战:从 Explain 到 Index Only Scan
https://www.oferry.com/posts/a23/
作者
辉哥
发布于
2026-02-04
许可协议
CC BY-NC-SA 4.0
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00