PostgreSQL 索引优化与查询计划入门查询计划基础使用 `EXPLAIN ANALYZE` 获取真实执行时长与行数估计偏差。关注 `Seq Scan`、`Index Scan`、`Bitmap 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; 维护与统计定期 `VACUUM` 与 `ANALYZE` 保持可见性地图与统计信息新鲜。避免在查询中对索引列进行函数转换,必要时建立函数索引。

发表评论 取消回复