首页/数据/SQL 速查/PostgreSQL INCLUDE 覆盖列
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条变更与事务52 条
性能与执行计划72 条

PostgreSQL INCLUDE 覆盖列

把仅用于返回的列放进 INCLUDE 子句:既能支撑 Index Only Scan,又不参与键排序与去重。

SQL 速查数据更新于 2026-10-12

示例

示例
CREATE INDEX idx_orders_user_created
  ON orders (user_id, created_at)
  INCLUDE (total);

EXPLAIN (ANALYZE)
SELECT user_id, created_at, total
FROM orders
WHERE user_id = 100
ORDER BY created_at DESC
LIMIT 10;
-- 计划可能显示:Index Only Scan using idx_orders_user_created
版本PostgreSQL 11 起支持 INCLUDE
与键列区别INCLUDE 列不能用于条件定位与排序,只随行附带存储
收益避免回表;比把列放进键里更省索引维护成本

易错点

  • 把 WHERE 过滤列放进 INCLUDE:它不参与定位,条件仍会退化为逐行过滤
  • 忽略可见性映射:Index Only Scan 是否真的避免回表,要看 Heap Fetches 与 VACUUM 状况

数据来源与参考

  • PostgreSQL Documentation · Index-Only Scans and Covering Indexes
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌