Greenplum PostgreSQLに、Oracleで以下のようにオプティマイザーのヒントが行うようなWITH
句でサブクエリを具体化するように強制する方法はありますか?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)
GreenplumPostgresql8.2を使用しています