不同的查询导致查询速度很慢

时间:2018-04-09 10:39:10

标签: sql postgresql postgresql-9.1

我有一个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_所以我只需要唯一的记录

1 个答案:

答案 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_)上的索引。