티스토리 뷰

카테고리 없음

[SQL] 매우 느린 오라클 선택 문

필살기쓰세요 2021. 2. 10. 04:12

주된 문제는 대부분의 하위 쿼리가 날짜의 어색한 것을 포함하여 검색 기준에 대한 기능을 사용한다는 것입니다. 실제 날짜를 제공하여 예상 범위를 뒤집고 명시 적으로 한정하는 것이 훨씬 낫습니다 (한 달 범위는 일반적으로 총 행의 작은 비율이므로 인덱스에 도달 할 가능성이 매우 높습니다).

SELECT Chart.levelP, Chart.code, Chart.descP,
       COALESCE(GL_SUM.ocf, 0),
              COALESCE(Transactions.bcf, 0),
                     COALESCE(Transactions.debit, 0),
                            COALESCE(Transactions.credit, 0),
                            FROM ca_ChartAcc Chart
                            LEFT JOIN (SELECT code, SUM(amount) AS ocf
                                       FROM ca_GLOpen
                                                  WHERE acc_mth = '2016') GL_Sum
                                                         ON GL_Sum.code = Chart.code
                                                         LEFT JOIN (SELECT code, 
                                                                           SUM(amount) AS bcf,
                                                                                             SUM(CASE WHEN amount > 0 THEN amount) AS debit,
                                                                                                               SUM(CASE WHEN amount < 0 THEN amount) AS credit,
                                                                                                                          FROM ca_GLMainTrx
                                                                                                                                     WHERE doc_date >= TO_DATE('2016-01-01')
                                                                                                                                                      AND doc_date < TO_DATE('2016-02-01')) Transactions
                                                                                                                                                              ON Transactions.code = Chart.code
                                                                                                                                                              WHERE Chart.code IS NOT NULL
                                                                                                                                                              ORDER BY TO_NUMBER(Chart.code), TO_NUMBER(Chart.levelP)
                                                                                                                                                              

코드가 몇 개만 필요한 경우 해당 값을 하위 쿼리로 푸시하는 것이 더 나은 결과를 얻을 수 있습니다 (최적화 프로그램이이를 수행 할 가능성이 있음). 에서에 대한
호출을 제거 할 수 있습니다 . 그러나 이는 값의 형식에 따라 달라집니다. 인코딩 된 방식이 결과 순서를 변경할 수 있기 때문입니다.TO_NUMBER(...)ORDER BY



출처
https://stackoverflow.com/questions/39930056
댓글
공지사항
Total
Today
Yesterday
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30