Oracle
 sql >> Database >  >> RDS >> Oracle

ho bisogno di aiuto per ottimizzare la query di Oracle

Ecco una query che combina ingenuamente le due query precedenti, quindi assicurati di controllare e confrontare gli output dei due metodi.

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;

Non è necessario utilizzare una tabella temporanea e quindi eliminare i record in seguito per ottenere i risultati richiesti. Anche se potrebbe esserci stata una ragione per il suo utilizzo, forse le prestazioni?

Inoltre, sembra la query e si unisce a USER la tabella non è necessaria in quanto USER_ID è disponibile da USER_ROLES . L'ho omesso dalla query sopra. Spero che questo ti dia un buon inizio per migliorarlo.