更新时间:2025-03-13 GMT+08:00

Result

算子说明

Result用于处理仅需要一次计算的条件表达式(2 > 1)或者insert中仅有一个VALUES子句,从而控制流程是否可以提前返回,不需要进行后续操作。

典型场景

  • Result节点用于优化常量条件表达式的查询,条件表达不依赖于扫描的数据,比如:select * from t1 where 1 > 2。
  • 当SELECT中没有FROM子句或者INSERT语句中只有一个VALUES子句时,执行器会直接计算SELECT的投影属性或者使用VALUES子句构造元组。

示例

示例1:Result节点用于优化常量条件表达式的查询。

--数据准备。 
gaussdb=# DROP TABLE IF EXISTS t1;
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=# EXPLAIN SELECT * FROM t1 WHERE 1 > 2; 
                QUERY PLAN
------------------------------------------
 Result  (cost=0.00..0.01 rows=1 width=0)
   One-Time Filter: false
(2 rows)

--删除。
gaussdb=# DROP TABLE IF EXISTS t1;

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

信息名称

含义

Result

算子的名称。

One-Time Filter

过滤的时候用的常量表达式恒为false,因此只执行一次表达式即可。

示例2:SELECT中没有FROM子句。

gaussdb=# EXPLAIN SELECT dbe_raw.bit_and('1','2'); 
                QUERY PLAN
------------------------------------------
 Result  (cost=0.00..0.01 rows=1 width=0)
(1 row)

示例3:INSERT语句中只有一个VALUES子句。

gaussdb=# EXPLAIN INSERT INTO t1 VALUES(1, 2, 3); 
                   QUERY PLAN
------------------------------------------------
 Insert on t1  (cost=0.00..0.01 rows=1 width=0)
   Node/s: All datanodes
   Node expr: c1
   ->  Result  (cost=0.00..0.01 rows=1 width=0)
(4 rows)

--删除。
gaussdb=# DROP TABLE IF EXISTS t1;