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

本章节将从源码的角度来分析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查询优化部分大致可以分为逻辑查询优化阶段,以及物理查询优化阶段,不同的阶段,执行前面章节介绍的等价替换,外链接消除,算法取最优路径等等。如果有兴趣看源码的读者可以通过以下路径获取所需的模块的代码。
在这里插入图片描述
其中核心的部分是查询优化器
在这里插入图片描述
以及各个部分的含义
在这里插入图片描述
源码按照这个架构去阅读,相信读者肯定可以感受到PG的规范以及模块的思想。

猜你喜欢

转载自blog.csdn.net/weixin_30947631/article/details/85544077
今日推荐