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

Zoptymalizuj zapytanie Oracle

Czy następujące zapytanie daje te same wyniki?

SELECT  c.role_id
        , c.subgroup
        , c.subgroup_description
        , COUNT(a.USER_ID) user_count 
FROM    cmp_role c
        LEFT OUTER JOIN (
          SELECT  r.user_id
                  , r.role_id 
          FROM    (
                    SELECT  r.user_id
                            , r.role_id
                            , r.participant_code
                            , MAX(r.status_id) 
                    FROM    user_role r
                            INNER JOIN cmp_role c ON c.role_id = r.role_id
                    WHERE   r.participant_code IS NOT NULL 
                            AND c.group_id = 3 
                    GROUP BY 
                            r.user_id
                            , r.role_id
                            , r.participant_code 
                    HAVING  MAX(r.status_id) IN (
                              SELECT  status_id 
                              FROM    user_role
                              WHERE   (Active = 1 
                                      OR (Active IN ( 0,3 ) 
                                          AND SYSDATE BETWEEN effective_from_date AND effective_to_date)
                                        )
                            ) 
                  ) r
                  INNER JOIN user e ON e.user_id = RTRIM(r.user_id)        
        ) a ON a.role_id = c.role_id         
WHERE   c.group_id = 3
GROUP BY 
        c.role_id
        , c.subgroup
        , c.subgroup_description 
ORDER BY 
        c.subgroup

Łatwiej jest czytać (dla mnie). Jeśli daje takie same wyniki, możesz już zacząć od porzucenia r.participant_code i MAX(r.status_id) z wewnętrznego wyboru.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kontynuacja wstawek w Oracle po zgłoszeniu wyjątku

  2. Spring JDBC Nie można załadować klasy sterownika JDBC [oracle.jdbc.driver.OracleDriver]

  3. Jak stworzyć zadanie, gdy zadanie_akcja musi wywołać procedurę z parametrem CLOB

  4. Wybierz w błędach PL-SQL:INTO After Select

  5. Oracle SQL:Jak odczytywać i zwiększać pole