首页 > 解决方案 > PostgreSQL - 从连接列连接索引

问题描述

我正在尝试使用 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));

这对性能产生了很小的影响。

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

我的下一个选择是添加一个新的列或函数,它会产生连接的值和索引并加入它。

标签: sqlpostgresqljoinpostgresql-9.2

解决方案


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

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

然后对于这个查询,我建议在audit(source). 这个查询计划应该是sourceaudit.


推荐阅读