PostgreSQL执行计划数据结构

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: PostgreSQL执行计划数据结构

过一个案例介绍PG执行计划相关数据结构:PlanStatePlan

以下面执行计划为例:


postgres=# explain select *from t2 where id1>(select t1.id1 from t1,t2 where t1.id1=t2.id1)
-------------------------------------QUERY PLAN--------------------------------------------
Seq Scan on t2 (cost = 69.73..87.23 rows=333 width=8)
    Filter :(id1>$0)
    InitPlan 1 (return $0)
        -> Hash Join (cost=27.50..69.73 rows=2550 width=4)
             Hash Cond:(t1.id1=t2_1.id1)
               ->Seq Scan On t1 (cost=0.00.35.50 rows=2550 width=4)
               ->Hash (cost=15.00..15.00 rows=1000 width=4)
                   ->Seq Scan On t2 t2_1 (cost=0.00..15.00 rows==1000 width=4)
(8 rows)
postgres=#

其中,相关子查询概念是内部依赖于外部,外部每次执行一次内部都执行一次,都是外部先执行,然后内部再执行,子查询需要外部传入值。而非相关子查询是内部查询独立于外部查询,仅需要执行一次并将结果作为外部查询条件使用。数据结构PlaninitPlan成员即为非相关子查询的链表指针。从上面的例子中可以知道子查询仅执行一次且独立于外部查询,所以他的执行计划中有InitPlan节点。其关系参考下图。

Plan结构的targetlist为该节点需要计算的目标列表。qual为查询条件(没有用到索引的),lefttreerighttree分别为左子树和右子树,即本利中的Seq Scan节点和Hash节点。

plan_node_id为该节点在本执行计划树种的唯一标识,从0开始。根节点为0

而子查询通过PlaninitPlan进行管理,对于数据结构为SubPlanState进行描述。该结构中有planstate指向子查询节点,本例子中为HashJoin节点的状态描述结构。而parent则指向父节点的状态结构,本例中为SeqScanState

子查询计划SubPlan和子计划HashJoin没有联系?


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
8月前
|
关系型数据库 PostgreSQL
PostgreSQL执行计划explain
PostgreSQL执行计划explain
68 0
|
10月前
|
SQL Cloud Native 关系型数据库
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版功能演示(上)——六、查看分析执行计划
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版功能演示(上)——六、查看分析执行计划
|
10月前
|
关系型数据库 PostgreSQL 索引
PostgreSQL 性能优化: 执行计划
PostgreSQL为每个收到的查询产生一个查询计划。查询计划的结构是一个计划结点的树。最底层的结点是扫描结点:它们从表中返回未经处理的行。不同的表访问模式有不同的扫描结点类型:顺序扫描、索引扫描、位图索引扫描。也还有不是表的行来源,例如VALUES子句和FROM中返回集合的函数,它们有自己的结点类型。如果查询需要连接、聚集、排序、或者在未经处理的行上的其它操作,那么就会在扫描结点之上有其它额外的结点来执行这些操作。并且,做这些操作通常都有多种方法,因此在这些位置也有可能出现不同的结点类型。
77 0
|
SQL 移动开发 关系型数据库
PostgreSQL 执行计划,成本公式解说,代价因子校准,自动跟踪SQL执行计划(三)|学习笔记
快速学习PostgreSQL 执行计划,成本公式解说,代价因子校准,自动跟踪SQL执行计划(三)
517 0
PostgreSQL 执行计划,成本公式解说,代价因子校准,自动跟踪SQL执行计划(三)|学习笔记
|
存储 NoSQL 关系型数据库
PostgreSQL中的变长数据结构Varlena
在本文是PostgreSQL学习系列---基础数据类型的第二篇,对PG中的Varlena类型进行了介绍,内容还会随着学习进行不断补充~
1228 0
|
关系型数据库 SQL MySQL
如何在线应对SQL语句执行计划?解读RDS MySQL 8.0之SQL Outline功能
这里边有几个因素和场景,比如:随着表数据量的变化,以及统计信息的自动收集,CBO optimizer 计算得到了一个cost 更低的 plan, 又或者 表结构发生了变化,增加和删减了某些索引,或者在实例升级迁移等过程中,MySQL 自身优化器行为和算法发生了变化等。
1468 0
|
SQL 关系型数据库
PostgreSQL citus, Greenplum 分布式执行计划 DEBUG
标签 PostgreSQL , citus , sharding , Greenplum , explain , debug 背景 开启DEBUG,可以观察citus, Greenplum的SQL分布式执行计划,下发情况,主节点,数据节点交互情况。
1563 0
|
关系型数据库 PostgreSQL
|
关系型数据库 PostgreSQL Linux