更新时间: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。 |
父主题: 表访问方式