更新时间: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;
父主题: 运算符