我们目前正在运行一个查询,对行数执行一个非常简单的连接和分组,最后进行联合。
(select
table_p."name",
table_p.id,
count(table.id),
sum(table.views)
from table
inner join table_p on table_p.id = table.pageid
where table.date BETWEEN '2020-03-01' AND '2020-03-31'
group by table_p.id
order by table_p.id)
union all
(select
table_p."name",
table_p.id,
count(table.id),
sum(table.views)
from table
inner join table_p on table_p.id = table.pageid
where table.date BETWEEN '2020-02-01' AND '2020-02-29'
group by table_p.id
order by table_p.id)
union all ....
由于我们的表有3.6亿条记录,我们决定使用BRIN索引。如果需要的话,我们也可以选择使用B-Tree。
现在由于某些原因,我们在解释分析中看到BRIN索引的 "并行意识 "设置为false,计划输出中列出了两个工人?另外,我们还看到,当我们将查询的量进行拆分时,表现为线性,即5秒内查询一个月,20秒内查询四个月。我想这意味着我们是异步查询而不是并行查询。
有谁知道我们可能会缺少什么,以便在可能的情况下进行并行查询?BRIN是否不能与并行工人一起工作?
编辑:这是BRIN在 "table "上的索引。
CREATE INDEX table_brin_idx
ON table USING brin
(date, teamid, id, pageid, devicetypeid, makeid, modelid)
TABLESPACE pg_default;
我的postgres版本是PostgreSQL 11.6 用Visual C++ build 1800编译的 64位版本
信息来自PostgreSQL文档。目前,并行索引扫描只支持以下情况 榕树 指数。资料来源。https:/www.postgresql.orgdocs11parallel-plans.html#PARALLEL-SCANS