Postgre查询优化器--上篇 原理解析

本文从源码角度探讨PostgreSQL(PG)优化器的工作原理和执行过程,包括四个阶段:语法分析、重写视图、物理查询计划生成和执行。强调了查询优化的重要性,特别是逻辑和物理优化阶段,并建议读者通过阅读源码了解PG的模块化设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章节将从源码的角度来分析PG优化器的原理,工作方式,本文大部分内容来自 李海翔 《数据库优化器的艺术》

PG的查询执行过程

从表象来分析PG的查询执行过程,从而深入理解架构层次,从PG的查询执行过程分为4个阶段,跟mysql的过程有点类似 语法分析阶段,语义分析阶段,优化阶段,这里分为视图重写,集合分解为非集合操作 因为数据库的瓶颈就在于IO,而这里PG针对IO的优化处理是通过对SQL的代数等价转换,如果是比较少的表进行关联的时候,就使用动态规划算法,如果是多表关联的时候就使用遗传算法。

PG查询执行器的架构

如果有条件的读者,尽可能的阅读源码,这里作者也是推荐亲自阅读,毕竟从设计风格来看,各个模块的耦合度低,清晰易懂,由于源码的深入不在本节的重点范围,从设计来看,PG的逻辑查询优化是通过对WHERE,HAVING,等进行优化,外链接消除优化,视图重写优化等,物理重写优化的阶段是通过动态规划以及遗传算法等来实现代价估算
在这里插入图片描述
从这个图可以看出来,PG 先是从P1转语法查询树,然后交给M1处理语法模块,执行P1的任务,递交给中央系统表,P2重写视图,M2拦截处理重写视图递交给中央系统表,P3处理物理查询执行计划,M3拦截查询优化,P4执行最优查询结果,M4拦截执行。
重点的部分就是M3查询优化部分大致可以分为逻辑查询优化阶段,以及物理查询优化阶段,不同的阶段,执行前面章节介绍的等价替换,外链接消除,算法取最优路径等等。如果有兴趣看源码的读者可以通过以下路径获取所需的模块的代码。
在这里插入图片描述<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值