sql >> Base de Datos >  >> RDS >> Oracle

necesito ayuda para optimizar la consulta de Oracle

Aquí hay una consulta que combina ingenuamente las dos consultas anteriores, así que asegúrese de verificar y comparar los resultados de los dos 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;

No es necesario usar una tabla temporal y luego eliminar registros para obtener los resultados requeridos. Aunque, puede haber una razón para su uso, ¿quizás el rendimiento?

Además, se parece a la consulta y se une al USER la tabla no es necesaria ya que USER_ID está disponible desde USER_ROLES . Lo he omitido de la consulta anterior. Con suerte, eso te da un buen comienzo para mejorarlo.