【发布时间】:2021-06-15 17:48:58
【问题描述】:
我们有一个溢出到磁盘的查询(大约 1 TB!),代码如下:
WITH q (year,quarter) AS ( SELECT * FROM temp.quarters) SELECT *,
(SELECT price FROM prices WHERE EXTRACT(QUARTER FROM
pricing_date::TIMESTAMP) = q.quarter AND EXTRACT(YEAR FROM
pricing_date::TIMESTAMP) = q.year ORDER BY pricing_date LIMIT 1) FROM
q ORDER BY q.year,q.quarter
价格表有数百万行,有没有办法改进这个查询,使它不会溢出太多?我们认为这可能是因为我们使用的是“With”子句而不是临时表?
下表定义:
CREATE TABLE public.record_pricing (
record_id int8 NOT NULL,
pricing_date date NOT NULL,
price numeric(26,10) NOT NULL,
)
WITH (
appendonly=true
);
没有索引,没有约束
谢谢,
【问题讨论】:
-
您能告诉我们 EXPLAIN (ANALYZE, BUFFERS) 的结果吗?你能告诉我们你的表和索引定义吗?没有这些信息,几乎不可能为您提供帮助。
-
没问题,我正在运行它,我会尽快将它发布在这里
-
您使用的是哪个 Postgres 版本?
-
我们使用的是 9.4.24,它是一个 Greenplum DB
-
然后尝试删除 CTE。 (这并不是真正需要的开始)。
标签: performance disk greenplum