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` 保持可见性地图与统计信息新鲜。避免在查询中对索引列进行函数转换,必要时建立函数索引。

发表评论 取消回复