---

title: PostgreSQL 索引优化与查询计划入门

keywords:

  • EXPLAIN ANALYZE
  • btree
  • 部分索引
  • 覆盖索引
  • VACUUM

description: 从 EXPLAIN ANALYZE 出发,理解 PostgreSQL 的索引类型与查询计划,掌握高性价比的优化方法。

date: 2025-11-25

draft: false

tags:

  • B-Tree
  • EXPLAIN ANALYZE
  • PostgreSQL
  • VACUUM
  • 技术
  • 数据库
  • 覆盖索引
  • 部分索引

categories:

  • 文章资讯
  • 技术教程

---

PostgreSQL 索引优化与查询计划入门

查询计划基础

  • 使用 EXPLAIN ANALYZE 获取真实执行时长与行数估计偏差。
  • 关注 Seq ScanIndex ScanBitmap Heap/Index Scan 的触发条件与代价模型。

索引类型与适用场景

  • B-Tree:等值与范围查询首选;支持 ORDER BY;PostgreSQL 11 起支持 INCLUDE 覆盖列。
  • GIN/GiST:全文搜索与复杂数据类型(数组、JSONB、地理数据)。
  • 部分索引:为热点数据建立 WHERE 条件索引,降低写入与维护成本。

示例

-- 覆盖索引(减少回表)
CREATE INDEX idx_orders_user_created_incl
  ON orders (user_id, created_at)
  INCLUDE (status);

-- 部分索引(只为常查的状态建立索引)
CREATE INDEX idx_orders_status_partial
  ON orders (status)
  WHERE status IN ('paid', 'shipped');

-- 计划查看
EXPLAIN ANALYZE
SELECT user_id, created_at, status
FROM orders
WHERE status = 'paid'
ORDER BY created_at DESC
LIMIT 50;

维护与统计

  • 定期 VACUUMANALYZE 保持可见性地图与统计信息新鲜。
  • 避免在查询中对索引列进行函数转换,必要时建立函数索引。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部