sql >> Database >  >> RDS >> Oracle

Oracle-query optimaliseren

Levert de volgende zoekopdracht dezelfde resultaten op?

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

Het is makkelijker te lezen (voor mij). Als het dezelfde resultaten oplevert, kun je al beginnen met het verwijderen van r.participant_code en MAX(r.status_id) uit de innerlijke selectie.




  1. Vraag extreem traag in code maar snel in SSMS

  2. SQL Server - Ongeldige tekens in parameternamen

  3. Oracle.DataAccess.Dll laadprobleem op x-64 machine

  4. Waarschuwing:mysqli_connect():(HY000/1049):Onbekende database alleen in mac-terminal