Запрос на лучшую структуру для улучшения производительности - PullRequest
0 голосов
/ 24 января 2020

Я пытался выполнить соединение по запросу, который работает по большей части, но он действительно медленный. Есть ли лучший способ структурировать этот запрос для оптимизации его производительности.


SELECT  DISTINCT(A.EMPLID),E.OPRID,E.OPRDEFNDESC,E.EMPLID,B.JPM_DATE_6,B.JPM_DATE_3,B.JPM_DATE_6,B.JPM_DESCR90 FROM (PS_JOB A LEFT OUTER JOIN PS_NPS_LICCERT_VW B ON A.EMPLID=B.EMPLID),PSOPRDEFN E
WHERE  a.EFFDT = (SELECT MAX(e.EFFDT) FROM PS_JOB e
        WHERE E.EFFDT <= sysdate
        and e.emplid = a.emplid
        and e.empl_rcd = A.EMPL_RCD)
        AND a.EFFseq = (SELECT MAX(f.EFFseq) FROM PS_JOB f
        WHERE f.EFFDT = a.effdt
        and f.emplid = a.emplid
        and f.empl_rcd = A.EMPL_RCD)
        AND A.PER_ORG = 'EMP'
        AND a.paygroup not in ('SUM','CWR')
        AND A.EMPL_STATUS in ('A', 'L', 'P', 'S')
/

Результат запроса следующий:

OPRID   OPRDEFND    JPM_DESCR90 B.JPM_DATE_3    JPM_DATE_6  H.DESCR H.LOCATION
jszigeti    Julie   ELEMENTARY SCHOOL TEACHER           1-Feb-96    South St.   93
jszigeti    Julie   TEACHER OF THE HANDICAPPED          1-Dec-91    South St.   93
rleon   Roger   ELEMENTARY SCHOOL TEACHER       1-Jul-92    1-Jun-92    Off-Exec Supt   400
rleon   Roger   ELEMENTARY SCHOOL TEACHER       1-Jul-93    1-Aug-92    Off-Exec Supt   400
rleon   Roger   ELEMENTARY SCHOOL TEACHER           1-Aug-92    Off-Exec Supt   400
rleon   Roger   ELEMENTARY SCHOOL TEACHER           1-Jul-93    Off-Exec Supt   400
rleon   Roger   PRINCIPAL   1-Jul-98    1-Mar-98    Off-Exec Supt   400


Изображения для плана объяснения для к запросу прилагаются

Снимок экрана1 .

Снимок экрана2

Снимок экрана3

1 Ответ

0 голосов
/ 24 января 2020

Мне удалось реструктурировать и оптимизировать мой запрос, используя следующие операторы SQL:

SELECT  DISTINCT(A.EMPLID),E.OPRID,E.OPRDEFNDESC,B.JPM_DESCR90,B.JPM_DATE_3,B.JPM_DATE_6 FROM PS_JOB A
LEFT OUTER JOIN PS_NPS_LICCERT_VW B ON A.EMPLID=B.EMPLID 
LEFT OUTER JOIN PSOPRDEFN E ON A.EMPLID=E.EMPLID
LEFT OUTER JOIN PS_NPS_VIEW_ALL H ON A.EMPLID=H.EMPLID
  WHERE  a.EFFDT = (SELECT MAX(e.EFFDT) FROM PS_JOB e
        WHERE E.EFFDT <= sysdate
        and e.emplid = a.emplid
        and e.empl_rcd = A.EMPL_RCD)
        AND a.EFFseq = (SELECT MAX(f.EFFseq) FROM PS_JOB f
        WHERE f.EFFDT = a.effdt
        and f.emplid = a.emplid
        and f.empl_rcd = A.EMPL_RCD)
        AND A.PER_ORG = 'EMP'
        AND a.paygroup not in ('SUM','CWR')
        AND A.EMPL_STATUS in ('A', 'L', 'P', 'S');

Это значительно сократило мое время ожидания и позволило перейти к следующей задаче

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...