Postgres 技术内幕,Optimizer过程分析

2023-05-08T11:33:02+08:00 | 1 minute read | Updated at 2025-07-21T18:42:10+08:00

1. 逻辑优化

1. 子查询提升

  1. exist 相关子链接会被提升,非相关子链接不会进行优化, 但是会生成 initplan,只需要执行一次
  2. any 相关子查询不会提升,非相关子查询才能进行优化,实际上any的非相关子查询隐含一个外部引用的条件, 实际上还是相关子查询
  3. 如果是 join 条件中的子链接,则需要遵守 “any 的 左边需要是对应链接类型中不含输出的那一边”, 例如 left join 要求 any 的 左边只能是关联右边的属性,因为如果是左边,提升之后左边现在有约束条件,可能不会全部输出
  4. 子链接存在复杂表达式不支持提升,如cte,聚合操作等
  5. 子查询类似

2. 表达式优化

  1. 常量折叠
  2. 谓词规范 1. 简化 2. 约束条件拉平 3. 提取公共项

3. group 杂项消除

如果group 中包含 主键,则可以直接消除其他

4. 外连接消除

  1. 可空测有条件约束绝对不为空,则外连接可转换为内连接

© 2016 - 2025 Askyx's Blog

🌱 Powered by Hugo with theme Dream.

About Me

Hi, my name is Yue Yang.

This is my blog.

ヾ(•ω•`)o

比较胆小,出门都得贴墙走