
# 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                                  
---------------------------------------------------------------------------- 
CTE Scan on tt (cost=7288.14..8937.58 rows=82472 width=4) 
  CTE tt 
  -> Recursive Union (cost=0.00..7288.14 rows=82472 width=4) 
    -> Seq Scan on t9 (cost=0.00..34.02 rows=2402 width=4) 
    -> WorkTable Scan on tt (cost=0.00..560.47 rows=8007 width=4) 
         Filter: (a < 10) 
(6 rows)
--删除。
gaussdb=# DROP TABLE t9;
```
上述示例中，WorkTable Scan算子输出信息如下所示。
| 信息名称           | 含义                 |
|:---|:---|
| WorkTable Scan | 算子的名称。             |
| Filter         | 算子的过滤条件，示例中为a小于10。 |
   
