GreenPlum和openGauss进行简单聚合时对扫描列的区别

简介: GreenPlum和openGauss进行简单聚合时对扫描列的区别

GreenPlumPG优化器下针对列存表执行单列聚集时(无过滤条件),不管聚集中包含多少列,都需要将所有列扫描上来。比如select avg(id1) from t1。扫描时,不仅将id1列的数据读取出来,还会将其他列的数据也读取上来。一旦列里有变长数据,无疑会显著拖慢扫描速度。

这是怎么做到的?在哪里设置的需要读取所有列?以及为什么要这么做?

1、首先,需要知道如何确定扫描哪些列。GPaocs_getnext函数中columScanInfo信息有投影列数和投影列数组,由此决定需要读取哪些列值:

2、接着就需要了解columScanInfo信息来自哪里

aoco_beginscan_extractcolumn函数对列进行提取,也就是targetlistqual

3、顺藤摸瓜,targetlistqual来自哪里?

SeqNext函数中,可以看到SeqScan计划节点的targetlistqual。由此可以知道他们来自执行计划中:

4、这样,就需要知道执行计划如何生成,targetlist链表是如何初始化的

create_plan是执行计划的生成入口。如果select id1 from t1,无聚合,那么入口的flag标签是CP_EXACT_TLIST,进入create_scan_plan后,use_physical_tlist函数依据该标签立即返回false,使用build_path_tlist构建targetlist,仅获取表id1列:

plan = create_plan_recurse(root,best_path,CP_EXACT_TLIST);

       plan = create_scan_plan(root,best_path,flags)  

而使用select avg(id1) from t1时,执行计划的首节点是AGG

plan = create_plan_recurse(root,best_path,CP_EXACT_TLIST);

到扫描节点处的标签是CP_LABEL_TLIST了,所以use_physical_tlist函数返回true,通过build_physical_tlist函数构建targetlist链表,该函数将所有列都构建了进去。

为什么要这么做呢?

5openGauss的聚合下列扫描仅扫描1列,它是如何做到的?

通过create_cstorescan_plan构建targetlist,可以看到它将传进来的tlist释放掉了,通过函数build_relation_tlist重新构建,此函数构建时,仅将聚合列构建进去。

目录
相关文章
|
6月前
|
SQL 关系型数据库 数据库
postgresql中连接两张表更新第三张表(updata)
如何结合两张表的数据来更新第三张表
80 0
|
9月前
|
存储 关系型数据库 MySQL
【MySQL】数据库约束与聚合查询和联合查询等进阶操作知识汇总(上)
【MySQL】数据库约束与聚合查询和联合查询等进阶操作知识汇总(上)
175 0
|
9月前
|
SQL 关系型数据库 MySQL
【MySQL】数据库约束与聚合查询和联合查询等进阶操作知识汇总(下)
【MySQL】数据库约束与聚合查询和联合查询等进阶操作知识汇总(下)
141 0
|
10月前
|
存储 关系型数据库 PostgreSQL
PostgreSQL表扫描方法解析
PostgreSQL表扫描方法解析
77 0
|
12月前
|
NoSQL MongoDB Redis
在MongoDB中使用聚合操作筛选与修改字段
在MongoDB中使用聚合操作筛选与修改字段
253 0
|
存储 SQL 关系型数据库
【MySQL从入门到精通】【高级篇】(二十九)覆盖索引的使用&索引下推
上一篇文章我们介绍了 【MySQL从入门到精通】【高级篇】(二十八)子查询优化,排序优化,GROUP BY优化和分页查询优化。这篇文章我们接着来介绍覆盖索引。
161 0
|
SQL 关系型数据库 MySQL
以 MySQL 为例我们来聊聊,索引创建原则和执行计划分析。
以 MySQL 为例我们来聊聊,索引创建原则和执行计划分析。
99 0
以 MySQL 为例我们来聊聊,索引创建原则和执行计划分析。
|
SQL 监控 关系型数据库
MYSQL性能调优05_覆盖索引、索引下推、如何选择合适的索引、Order by与Group by优化、索引设计原则(五)
MYSQL性能调优05_覆盖索引、索引下推、如何选择合适的索引、Order by与Group by优化、索引设计原则(五)
144 0
|
关系型数据库 MySQL 索引
MYSQL性能调优05_覆盖索引、索引下推、如何选择合适的索引、Order by与Group by优化、索引设计原则(四)
MYSQL性能调优05_覆盖索引、索引下推、如何选择合适的索引、Order by与Group by优化、索引设计原则(四)
119 0
MYSQL性能调优05_覆盖索引、索引下推、如何选择合适的索引、Order by与Group by优化、索引设计原则(四)