PostgreSQL 查询优化器解析
851.23 KB
37 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
中文(简体) | .pdf | 3 |
摘要 | ||
文档主要介绍了PostgreSQL查询优化器的工作原理和优化策略。优化器会根据关系数量选择合适的算法,如GEQO。当关系过多时,优化器会将复杂的连接问题分解为更小的子问题,并通过路径结构来管理查询计划。文档还详细说明了后扫描规划的步骤,包括路径扩展、计划调整和子查询处理等。此外,文档通过具体查询示例展示了不同连接方式(如嵌套循环左连接和哈希连接)的执行计划。优化器会根据查询条件选择最优的连接方法,并通过过滤条件来提高查询效率。 | ||
AI总结 | ||
《PostgreSQL 查询优化器解析》
1. **连接搜索**
- 当关系数超过默认值(12)时,优化器会回退到GEQO(基因查询优化器)。
- 避免连接不受join子句连接的关系,除非受到join顺序限制的强制要求。
- 通过不展平JOIN子句(受Collapse Limit限制)将大型join问题分解为子问题。
2. **路径规划**
- 为每一步使用“Path”数据结构。
- 为每个存活路径添加LockRows、Limit、ModifyTable等步骤。
3. **后期处理**
- 将最优路径扩展为计划。
- 调整Plan的细节:
- 将子查询的RangeTable展平成单个列表。
- 在上层计划节点中标记变量为OUTER_VAR或INNER_VAR,以引用子计划输出。
- 删除不必要的SubqueryScan、Append和MergeAppend计划节点。
4. **查询计划示例**
- **嵌套循环左连接**:
- Join Filter: `foo.a = 42`
- 执行计划:`Seq Scan on foo -> Materialize -> Seq Scan on bar`。
- **哈希左连接**:
- Join Cond: `foo.a = bar.c`
- Filter: `COALESCE(bar.c, 1) = 42`
- 执行计划:`Seq Scan on foo -> Hash -> Seq Scan on bar`。
该文档详细介绍了PostgreSQL查询优化器的工作原理,包括连接搜索、路径规划和后期处理,并通过具体案例展示了查询优化的不同执行计划。 |
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余
25 页请下载阅读 -
文档评分