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. 可空测有条件约束绝对不为空,则外连接可转换为内连接