目录

PostgreSQL 性能优化:让你的查询快 10 倍

慢查询通常只有几个根因:缺索引、写法低效、配置默认值。这篇文章用 PostgreSQL 官方文档 的最佳实践,结合实测数据,帮你系统排查。

索引优化

-- 常见错误:建了索引但不用
CREATE INDEX idx_user_email ON users(email);

-- EXPLAIN 确认索引被使用
EXPLAIN ANALYZE SELECT * FROM users WHERE email = '[email protected]';

-- 复合索引顺序:等值在前,范围在后
CREATE INDEX idx_order_status_date ON orders(status, created_at);

查询优化

-- 用 EXPLAIN 分析
-- 可以用 https://explain.depesz.com 或 https://pganalyze.com 可视化执行计划
EXPLAIN ANALYZE 
SELECT * FROM orders 
WHERE user_id = 123 
  AND created_at > '2025-01-01';

-- N+1 查询
-- 错误
SELECT * FROM orders LIMIT 100;
-- 然后 for 每个 order: SELECT * FROM users WHERE id = order.user_id

-- 正确:用 JOIN
SELECT o.*, u.name 
FROM orders o
JOIN users u ON o.user_id = u.id
LIMIT 100;

配置调参

# postgresql.conf
shared_buffers = 256MB        # 25% RAM
effective_cache_size = 768MB  # 75% RAM
work_mem = 64MB
random_page_cost = 1.1        # SSD 用这个

结论

优化三板斧:索引 + 查询 + 配置。按顺序排查。