PostgreSQL-从连接的列连接索引

PostgreSQL-从连接的列连接索引,sql,postgresql,join,postgresql-9.2,Sql,Postgresql,Join,Postgresql 9.2,我试图用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上有索引。虽然这需要很长时间 我已尝试

我试图用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));
这对性能影响不大

是否可以在连接索引上显式执行此连接?或者它已经这样做了


我的下一个选择是添加一个新的列或函数,该列或函数产生连接的值和索引,并在此基础上进行连接。

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

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

然后对于这个查询,我建议在
audit(source)
上建立一个索引。此查询计划应该是对
源代码的扫描,并在
审核

中查找索引值。您好,Gordon,我已经在审核中找到了索引(源代码)。我尝试过你的建议,删除子查询,直接连接concat'd列,但不幸的是,这对性能没有影响。如果它有助于给出上下文,那么每个表中大约有30万行。@Steven。查询计划中是否正在使用索引?