我正在 PostgreSQL 9.5 中处理从两个视图中提取的 SQL 查询。单独来看,这些视图需要 93 毫秒和 530 毫秒来执行,分别产生 ~1500 和 ~6200 行。鉴于处理进入视图,这似乎是合理的,其中包括与 PostGIS 的一些空间交叉点。但是,当我执行下面的查询时,大约需要 5 秒才能执行。
据我所知, usingWITH
应该强制子查询在下面的查询中的评估之前执行一次,这应该导致总时间不到一秒而不是五秒。
如果我通过 ODBC/MS Access 链接到两个视图并使用 MS Access 在没有 的情况下执行查询WITH
,它会在不到一秒的时间内执行。这让我认为,当我在 pgAdmin 中执行子查询时,在加入之前不会每次都执行一次。
视图中没有其他 CTE,只有子查询。
有没有更好的方法来做到这一点,或者强制执行顺序的黑客?
WITH
eu AS (
SELECT
e.sample_pk,
.....
FROM
public.samples_exp_unit AS e
),
sr AS (
SELECT
r.sample_pk,
.....
FROM
public.sample_results AS r
)
SELECT
sr.sample_pk,
eu.inventory_pk,
.....
FROM sr INNER JOIN eu
ON sr.sample_pk = eu.sample_pk
Run Code Online (Sandbox Code Playgroud)
全查询的执行计划:
"Hash Join (cost=963.49..1007.02 rows=9 width=120) (actual …
Run Code Online (Sandbox Code Playgroud)