我有一个postgres查询,几乎需要7秒。 使用where子句连接两个表,当我使用distinct时需要7秒而没有明显的我在500ms内获得结果。我甚至应用了索引但没有帮助。如何调整查询以获得更好的性能
select distinct RES.* from ACT_RU_TASK RES inner join ACT_RU_IDENTITYLINK I on
I.TASK_ID_ = RES.ID_ WHERE RES.ASSIGNEE_ is null
and I.TYPE_ = 'candidate'and ( I.GROUP_ID_ IN ( 'us1','us2') )
order by RES.priority_ desc LIMIT 10 OFFSET 0
对于每个RES.ID_我有两个I.TASK_ID_所以我只需要唯一的记录
答案 0 :(得分:3)
而不是使用distinct
使用exists
:
select RES.*
from ACT_RU_TASK RES
where exists (select 1
from ACT_RU_IDENTITYLINK I
where I.TASK_ID_ = RES.ID_ and
I.TYPE_ = 'candidate' and
I.GROUP_ID_ IN ( 'us1','us2')
) and
RES.ASSIGNEE_ is null
order by RES.priority_ desc
LIMIT 10 OFFSET 0;
对于此查询,您需要ACT_RU_IDENTITYLINK(TASK_ID_, TYPE_, GROUP_ID_)
上的索引。也可以使用ACT_RU_TASK(ASSIGNEE_, priority_, ID_)
上的索引。