数据库性能优化是后端开发的重要技能。本文分享 PostgreSQL 性能优化的实战经验。
索引优化
B-tree 索引
最常用的索引类型:
CREATE INDEX idx_users_email ON users(email);
复合索引
CREATE INDEX idx_posts_category_date
ON posts(category_id, published_at DESC);
部分索引
只索引需要的行:
CREATE INDEX idx_active_users
ON users(created_at)
WHERE status = 'active';
查询优化
EXPLAIN ANALYZE
分析查询计划:
EXPLAIN ANALYZE
SELECT * FROM posts
WHERE category_id = 1
ORDER BY published_at DESC
LIMIT 10;
避免 N+1 查询
使用 JOIN 而非多次查询:
-- 不好: N+1 查询
SELECT * FROM posts;
-- 然后循环查询每篇文章的分类
-- 好: 一次 JOIN
SELECT p.*, c.name AS category_name
FROM posts p
JOIN categories c ON p.category_id = c.id;
连接池配置
pgBouncer
[databases]
mydb = host=localhost port=5432 dbname=mydb
[pgbouncer]
pool_mode = transaction
max_client_conn = 100
default_pool_size = 20
总结
PostgreSQL 性能优化需要理解数据库原理、合理使用索引、优化查询语句。持续监控和调优是关键。