首页/数据/SQL 速查/PG 连接节点:Nested Loop / Hash / Merge
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条变更与事务52 条
性能与执行计划72 条

PG 连接节点:Nested Loop / Hash / Merge

计划树里三种连接算法各有适用场景:驱动集大小、内表索引、两侧有序性是选择依据。

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

连接节点

算法适用场景
Nested Loop驱动集小且内表连接列有索引:逐行查找
Hash Join等值连接、两侧数据量较大:构建哈希表后探测
Merge Join两侧已按键有序(排序或索引输出):归并匹配

示例

示例
EXPLAIN
SELECT u.name, o.total
FROM users u
JOIN orders o ON o.user_id = u.id
WHERE u.city = 'shanghai';
-- 输出可能出现:
-- Hash Join  (cost=...)
--   Hash Cond: (o.user_id = u.id)
选择依据估算行数、可用索引、是否需要排序
哈希内存Hash Join 受 work_mem 限制,超出会分批落盘
并行Gather / Gather Merge 表示并行执行,配合 workers planned 查看

易错点

  • 把 Nested Loop 一律当低效:小驱动集配合内表索引时它是合理选择
  • 只盯连接算法不调 work_mem:哈希连接分批落盘时,提高 work_mem 往往更直接

数据来源与参考

  • PostgreSQL Documentation §14.1 Using EXPLAIN
  • PostgreSQL Documentation §15.5 Planner Method Configuration
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌