Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

precisa de ajuda para otimizar a consulta oracle


Aqui está uma consulta que combina ingenuamente as duas consultas acima, portanto, verifique e compare as saídas dos dois métodos.
select 
  r.user_id, r.role_id, r.participant_code, max(status_id)
from 
  user_role r, 
  cmp_role c
where 
      r.role_id = c.role_id
  and r.active in (0,1,3)
  and r.participant_code is not null
  and sysdate between r.effective_from_date and r.effective_to_date
  and c.group_id = 3
group by 
  r.user_id, r.role_id, r.participant_code;

Não é necessário usar uma tabela temporária e excluir os registros posteriormente para obter os resultados necessários. Embora possa ter havido uma razão para seu uso, talvez desempenho?

Além disso, parece que a consulta e junta-se ao USER tabela é desnecessária, pois o USER_ID está disponível em USER_ROLES . Eu o omiti da consulta acima. Espero que isso lhe dê um bom começo para melhorá-lo.