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,速度飞快。
维护成本
别忘了,索引会拖慢 INSERT 和 UPDATE 的速度。每多一个索引,数据库在写入时就要多做一份工作。只为高频查询创建索引,定期清理未使用的索引。
PostgreSQL 索引优化实战:从 Explain 到 Index Only Scan
https://www.oferry.com/posts/a23/