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

WorkTable Scan

算子说明

WorkTable Scan是一种基于内存的查询优化技术,它可以将查询结果缓存在内存中,以提高查询性能。当GaussDB执行一个查询语句时,它会将查询结果存储在一个临时表中,然后使用WorkTable Scan来扫描这个临时表,以获取查询结果。WorkTable Scan的优点是可以减少磁盘I/O操作,提高查询性能。但是,它也有一些缺点,比如会消耗大量的内存空间,可能会导致内存溢出等问题。因此,在使用WorkTable Scan时,需要根据具体情况进行调整和优化。

典型场景

  • 大表查询:当查询涉及到大表时,WorkTable Scan可以将查询结果分成多个工作单元,每个工作单元处理一部分数据,从而提高查询效率。
  • 多表关联查询:当查询需要关联多个表时,WorkTable Scan可以将每个表的数据分成多个工作单元,每个工作单元处理一部分数据,从而减少关联操作的数据量,提高查询效率。
  • 分区表查询:当查询涉及到分区表时,WorkTable Scan可以将每个分区的数据分成多个工作单元,每个工作单元处理一部分数据,从而提高查询效率。
  • 大数据量统计查询:当查询需要对大量数据进行统计时,WorkTable Scan可以将数据分成多个工作单元,每个工作单元处理一部分数据,从而提高查询效率。

示例

示例:Recursive Union的表不带索引

--数据准备。 
gaussdb=# CREATE TABLE t9(a int); 
CREATE TABLE 
gaussdb=# INSERT INTO t9 VALUES(1); 
INSERT 0 1

--执行结果。 
gaussdb=# EXPLAIN WITH RECURSIVE tt AS ( 
SELECT a FROM t9 
UNION ALL 
SELECT a + 1 FROM tt WHERE a < 10) 
SELECT * FROM tt; 
                                QUERY PLAN
---------------------------------------------------------------------------
 Streaming (type: GATHER)  (cost=48.89..85.84 rows=721 width=4)
   Node/s: All datanodes
   ->  CTE Scan on tt  (cost=0.00..7.20 rows=721 width=4)
         ->  Recursive Union  (cost=0.00..44.89 rows=721 width=4)
               ->  Seq Scan on t9  (cost=0.00..13.13 rows=20 width=4)
               ->  WorkTable Scan on tt  (cost=0.00..2.45 rows=70 width=4)
                     Filter: (a < 10)
(7 rows)

--删除。
gaussdb=# DROP TABLE t9;

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

信息名称

含义

WorkTable Scan

算子的名称。

Filter

算子的过滤条件,示例中为a小于10。