Oracle
 sql >> Base de données >  >> RDS >> Oracle

besoin d'aide pour optimiser une requête oracle

Voici une requête qui combine naïvement les deux requêtes ci-dessus, alors assurez-vous de vérifier et de comparer les résultats des deux méthodes.

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;

Il n'est pas nécessaire d'utiliser une table temporaire puis de supprimer des enregistrements par la suite pour obtenir les résultats requis. Bien qu'il y ait peut-être une raison à son utilisation, peut-être la performance ?

En outre, cela ressemble à la requête et à la jointure au USER la table est inutile car le USER_ID est disponible auprès de USER_ROLES . Je l'ai omis de la requête ci-dessus. J'espère que cela vous donne un bon début pour l'améliorer.