更新时间:2025-05-29 GMT+08:00

Append

算子说明

Append用于多个关系集合的追加,同时处理包含一个或多个子计划的链表。

典型场景

  • 带UNION的SQL语句场景。
  • 带UNION ALL的SQL语句场景。

示例

示例1:带UNION的SQL语句场景。

--数据准备。 
gaussdb=# CREATE TABLE t1(c1 number, c2 number, c3 number); 
CREATE TABLE 
gaussdb=# INSERT INTO t1 VALUES(generate_series(1, 100), 2, 3); 
INSERT 0 100 
gaussdb=# CREATE TABLE t2(c1 number, c2 number, c3 number); 
CREATE TABLE 
gaussdb=# INSERT INTO t2 VALUES(generate_series(1, 100), 2, 3); 
INSERT 0 100

--执行结果。 
gaussdb=# EXPLAIN SELECT * FROM t1 UNION SELECT * FROM t2; 
                            QUERY PLAN                             
------------------------------------------------------------------ 
 HashAggregate  (cost=31.57..39.05 rows=748 width=85) 
   Group By Key: t1.c1, t1.c2, t1.c3 
   ->  Append  (cost=0.00..25.96 rows=748 width=85) 
         ->  Seq Scan on t1  (cost=0.00..2.00 rows=100 width=15) 
         ->  Seq Scan on t2  (cost=0.00..16.48 rows=648 width=96) 
(5 rows)

上述示例中,Append算子输出信息如下所示。

信息名称

含义

Append

算子的名称。

Seq Scan on t1

算子的名称。表示对t1表进行顺序扫描。

Seq Scan on t2

算子的名称。表示对t2表进行顺序扫描。

示例2:带UNION ALL的SQL语句场景。

gaussdb=# EXPLAIN SELECT * FROM t1 UNION ALL SELECT * FROM t2; 
                           QUERY PLAN                             
----------------------------------------------------------------- 
 Result  (cost=0.00..4.00 rows=200 width=15) 
   ->  Append  (cost=0.00..4.00 rows=200 width=15) 
         ->  Seq Scan on t1  (cost=0.00..2.00 rows=100 width=15) 
         ->  Seq Scan on t2  (cost=0.00..2.00 rows=100 width=15) 
(4 rows)

--删除。
gaussdb=# DROP TABLE t1,t2;