PostgreSQL 主要模块原理

PG收到来自客户端的SQL语句后进入Parser模块,Parser模块负责词法分析、语法分析,生成各种Stmt结构体传入Analyzer进行语义检查,语义检查完后生成Query结构体进入查询重写阶段。查询重写主要是对视图的重写,然后进入优化器阶段进行查询优化。

查询优化分为逻辑优化和物理优化,逻辑优化主要包括:表达式预处理、子查询优化、子连接提升、等价谓词重写、条件化简、外连接消除等,对查询树进行等价逻辑优化,生成逻辑查询执行计划。物理优化则是基于代价的查询优化(Cost-based Optimizer,简称CBO),其主要流程是枚举各种待选的物理查询路径,并且根据路径上各节点的信息计算这些待选路径的代价,进而选择出代价最小的路径。以上是SPJ的优化,对于非SPJ优化主要是对分组、排序、聚集、去重等操作的优化。

PG查询优化器在物理查询执行计划阶段,在解决多表连接的问题时有两套算法:动态规划算法和遗传算法。动态规划算法适用于较少表连接的情况,一般是少于12个表对象的连接,超过12表的连接,使用遗传算法。但遗传算法不能保证得到最优的查询执行计划。

经过查询优化生成最优(cost最少)的执行计划,执行器执行计划获得查询结果返回给客户端。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helenbi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值