PostgreSQL - 从连接列连接索引

Posted

技术标签:

【中文标题】PostgreSQL - 从连接列连接索引【英文标题】:PostgreSQL - Joining on index from concaternated columns 【发布时间】:2021-05-14 01:51:00 【问题描述】:

我正在尝试使用 PostgreSQL 9.2 将两个表连接在一起,其中一个是返回连接列的子查询,但这需要很长时间。

本质上,我的查询是:

select *
from (
  select (s.a || ':' || s.b) source_key
  from source s
) sourcedata
join audit a on a.source = sourcedata.source_key

我在 source.a、source.b 和 audit.source 上有索引。虽然需要很长时间。

我已尝试在源上添加索引:

create index source_key_idx on source((a || ':' || b));

这对性能有很小的影响。

是否可以在级联索引上显式执行此连接?还是已经这样做了?

我的下一个选择是添加一个新的列或函数,它会产生串联的值和索引,然后加入。

【问题讨论】:

【参考方案1】:

首先,我建议编写不带子查询的查询:

select *
from source s join
     audit a
     on a.source = (s.a || ':' || s.b).

那么对于这个查询,我建议在audit(source) 上建立一个索引。该查询计划应该是对source 的扫描,并在audit 中查找索引值。

【讨论】:

嗨,戈登,我已经有一个审计索引(来源)。我已经尝试过您关于删除子查询并直接加入连接列的建议,但不幸的是它对性能没有影响。如果它有助于提供上下文,那么每个表中大约有 30 万行。 @Steven 。 . .查询计划中是否使用了索引?

以上是关于PostgreSQL - 从连接列连接索引的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL - 从连接表中选择聚合列并使用它来求和

错误:分布式表的唯一索引必须包含散列分布列。啥时候从 postgresql 迁移到 postgresql-xl

具有两个内部连接的 PostgreSQL 查询

从内部连接更新列[重复]

如何创建一个结构连接行作为嵌套文档 PostgreSQL

PostgreSQL - 从相关表中复制列