Oracle
 sql >> Baza danych >  >> RDS >> Oracle

potrzebujesz pomocy w optymalizacji zapytania Oracle

Oto zapytanie, które naiwnie łączy dwa powyższe zapytania, więc upewnij się, że sprawdziłeś i porównałeś wyniki z dwóch metod.

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;

Nie jest konieczne używanie tabeli tymczasowej, a następnie usuwanie rekordów, aby uzyskać wymagane wyniki. Chociaż mógł być powód jego użycia, może wydajność?

Wygląda też jak zapytanie i dołączenie do USER tabela jest niepotrzebna, ponieważ USER_ID jest dostępny od USER_ROLES . Pominąłem to w powyższym zapytaniu. Mam nadzieję, że to dobry początek jego ulepszania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest idealny zestaw narzędzi do programowania w PL/SQL?

  2. Nie można otworzyć menu Widok->DBA w programie SQL Developer (zainstalowano Oracle 12C Standard Edition)

  3. Czy %NOTFOUND może zwrócić wartość null po pobraniu?

  4. Liczenie niezerowych kolumn w dość dziwny sposób

  5. Oracle:czy jest jakiś logiczny powód, aby nie używać wykonywania równoległego z podzapytaniami z listy SELECT?