更新时间:2025-05-29 GMT+08:00
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。 |
父主题: 表访问方式