Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Brauchen Sie Hilfe bei der Optimierung der Oracle-Abfrage

Hier ist eine Abfrage, die die beiden obigen Abfragen naiv kombiniert, also stellen Sie sicher, dass Sie die Ausgaben der beiden Methoden überprüfen und vergleichen.

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;

Es ist nicht erforderlich, eine temporäre Tabelle zu verwenden und anschließend Datensätze zu löschen, um die erforderlichen Ergebnisse zu erhalten. Obwohl es vielleicht einen Grund für seine Verwendung gegeben hat, vielleicht die Leistung?

Außerdem sieht es aus wie die Abfrage und der Beitritt zum USER Tabelle ist als USER_ID unnötig ist unter USER_ROLES verfügbar . Ich habe es in der obigen Abfrage weggelassen. Hoffentlich gibt Ihnen das einen guten Start, um es zu verbessern.