微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL - 从串联列加入索引

如何解决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));

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

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

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

解决方法

首先,我建议在没有子查询的情况下编写查询:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。