Postgre查询优化器 --中篇 数据结构

上篇简单的介绍了PG的查询架构,以及优化的过程,本篇将从数据结构角度分析,查询优化器的工作过程。本节的重点在于所提到的数据结构之间的关系,在整个PG架构里的作用。

主要的数据结构

作为查询优化器的4个重要的数据结构,前一篇提到的左深树等树的结构,那基本的数据结构肯定有list,node等。查询树,关系对象,连接关系对象,查询执行计划
而基本的数据结构是list。定义如下:在这里插入图片描述
以及定义了listCell的数据结构
在这里插入图片描述
另外一种常用的数据结构是Node,提供头部结构的存放对象
在这里插入图片描述
还有标志SQL语句的命令类型CmdType在这里插入图片描述
介绍完基本的数据结构,查询树的数据结构就可以使用上面提及的来表示
在这里插入图片描述

表对象,索引对象数据结构

PG在不同的查询优化阶段的对象数据结构,比如范围表,这个是一个查询对象,在这里插入图片描述

表示一种在查询过程中的虚拟关系的数据结构
在这里插入图片描述

针对索引设计的索引数据结构
在这里插入图片描述
提到的这些数据结构,从作用方面对比如下
在这里插入图片描述

连接操作相关的数据结构

跟连接相关的数据结构,这个肯定是跟JOIN,WHERE,HAVING等条件约束有关,这里就产生一个约束条件对象在这里插入图片描述

根据多表之间的关联,连接的信息相关的数据结构,特定连接信息数据结构
在这里插入图片描述

上面提到了,连接的信息,连接的对象,这里还有补充是连接的路径
在这里插入图片描述
而针对这些路径提供排序的对象,这里体现在遗传算法的“优胜劣汰”,这里的排序路径会有许多,通过这些路径会选出一种最优的路径来。
在这里插入图片描述

还根据连接的类型,给出的JoinType数据结构
在这里插入图片描述

这些节点之间的关系
在这里插入图片描述

这些数据结构之间的关系
在这里插入图片描述
了解了这些主要的数据结构之后,后续的内容还需要回来继续对比才能更好的理解这里的设计的逻辑。

猜你喜欢

转载自blog.csdn.net/weixin_30947631/article/details/85554141