用途:面向 PostgreSQL 数据库的性能优化,围绕索引、查询计划、分区、JSONB 与连接池展开,适合排查慢查询、优化表结构与连接管理。
主要能力: 索引策略:B-tree 用于等值与范围查询;复合索引按等值列在前、范围列在后排列;部分索引缩小过滤子集;覆盖索引用 INCLUDE 避免回表;GIN 用于 JSONB 包含查询;GiST 用于全文检索;CREATE INDEX CONCURRENTLY 可无表锁建索引。 查询计划:用 EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) 分析,关注大表 Seq Scan(缺索引)、高行数估算的 Nested Loop(缺连接索引)、无 Index Scan 的 Sort(内存/磁盘排序)以及 Buffers 的 shared hit 与 shared read 缓存效率。 分区:按 RANGE 分区(如按 created_at),PG 11+ 分区索引自动继承;建议超过 1000 万行且查询稳定过滤分区键时使用。 JSONB:用 @> 查询嵌套字段,jsonb_set 更新嵌套值,jsonb_array_elements_text 展开数组,? 判断键存在。 连接池:PgBouncer 配置示例含 pool_mode、max_client_conn、default_pool_size 等;Web 应用用 transaction 级池化,使用预处理语句或临时表的应用用 session 级。 调优与排查:通过 pg_stat_statements 按 total_exec_time 找慢查询,通过 pg_stat_user_indexes 找 idx_scan=0 的未使用索引。
限制与注意:资料未提供具体版本兼容范围、性能提升数值或部署环境要求;反模式包括给每列建索引、滥用 SELECT *、不用 EXPLAIN ANALYZE 验证、把大对象存 JSONB、缺少连接池、高峰执行 VACUUM FULL。检查清单强调索引匹配真实查询、复合索引顺序、关键查询跑 EXPLAIN ANALYZE、使用部分索引与连接池、考虑分区、清理未用索引并启用 pg_stat_statements。