有没有办法强制Greenplum PostgreSQL在一个WITH
子句中实现子查询,就像Oracle中MATERIALIZE
的INLINE
优化器提示在下面所做的那样?
WITH dept_count AS (
SELECT /*+ MATERIALIZE */ deptno, COUNT(*) AS dept_count
FROM emp
GROUP BY deptno)
SELECT ...
我已经搜索了一段时间,只是在 Oracle 中找到了这个功能。
我知道我可以使用CREATE TABLE AS
,但是我有几个类似的查询,迫使我在每次查询后删除临时表,这非常不方便,而且可能效率低下。
更新:我测试了下表:
CREATE TABLE test (id: INT);
EXPLAIN WITH test2 AS (SELECT id FROM test)
SELECT COUNT(*) FROM test2;
QUERY PLAN
------------------------------------------------------------------------------------
Aggregate (cost=0.36..0.37 rows=1 width=8)
-> Gather Motion 32:1 (slice1; segments: 32) (cost=0.01..0.35 rows=1 width=8)
-> Aggregate (cost=0.01..0.01 rows=1 width=8)
-> Subquery Scan test2 (cost=0.00..0.00 rows=1 width=0)
-> Seq Scan on test (cost=0.00..0.00 rows=1 width=4)
我正在使用 Greenplum Postgresql 8.2