sql >> Databasteknik >  >> RDS >> Oracle

behöver hjälp med att optimera Oracle-frågan

Här är en fråga som naivt kombinerar de två frågorna ovan, så se till att du kontrollerar och jämför utdata från de två metoderna.

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;

Det är inte nödvändigt att använda en tillfällig tabell och sedan radera poster efteråt för att få de resultat som krävs. Även om det kan ha funnits en anledning till dess användning, kanske prestanda?

Det ser också ut som frågan och gå med i USER tabellen är onödig som USER_ID är tillgänglig från USER_ROLES . Jag har utelämnat det från frågan ovan. Förhoppningsvis ger det dig en bra start på att förbättra det.



  1. Är det bättre att göra med en union i SQL eller separata frågor och sedan använda php array_merge?

  2. Parameteriserade frågor PHP/MySQL

  3. Formateringsdatum i PHP/MySQL-fråga

  4. Nested Loop Join in Oracle 11g