Есть ли способ заставить Greenplum PostgreSQL материализовать подзапрос в предложении WITH
, подобно тому, что MATERIALIZE
и INLINE
подсказки оптимизатора делать в Oracle, как показано ниже?
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.
explain analyze
вывод. - person Craig Ringer   schedule 09.03.2013@
-reply в комментарии, чтобы убедиться, что я получаю уведомление. - person Erwin Brandstetter   schedule 09.03.2013SELECT version()
. - person Craig Ringer   schedule 09.03.2013Gather Motion
, его просто нет; Pg 8.2 также не поддерживает CTE. Так что ваш вопрос на самом деле вовсе не о PostgreSQL... - person Craig Ringer   schedule 09.03.2013