
# WorkTable Scan
#### 算子说明
WorkTable Scan是一种基于内存的查询优化技术，它可以将查询结果缓存在内存中，以提高查询性能。当GaussDB执行一个查询语句时，它会将查询结果存储在一个临时表中，然后使用WorkTable Scan来扫描这个临时表，以获取查询结果。WorkTable Scan的优点是可以减少磁盘I/O操作，提高查询性能。但是，它也有一些缺点，比如会消耗大量的内存空间，可能会导致内存溢出等问题。因此，在使用WorkTable Scan时，需要根据具体情况进行调整和优化。
#### 典型场景
- 递归查询：在WITH RECURSIVE场景下，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。 |
   
