ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [완료]/*VoteRelation.base.selectAlbumList*/
    Postgresql / PPAS/Query tuning 2022. 8. 29. 14:27

     

    AS-IS
    20 sec

    TO-BE
    17 ms

    개선 효과 : 99.91%

     

    * 원본 쿼리

    SELECT /*VoteRelation.base.selectAlbumList*/
    A.TOTAL_CNT
       , A.RNUM
       , A.ALBUM_ID
       , A.ALBUM_NAME
                   , TO_CHAR(TO_TIMESTAMP(A.ALBUM_DATE, 'YYYYMMDDHH24MISS'), 'YYYY-MM-DD') ALBUM_DATE
     FROM (
               SELECT /*+ LEADING(AI) INDEX(AI PK_PT_LA_ALBUM_INFO) USE_NL(AI S)*/
                      AI.ALBUM_ID
                    , AI.ALBUM_NAME 
       , AI.ALBUM_DATE
                    , COUNT(AI.ALBUM_ID) OVER() AS TOTAL_CNT
                    , ROW_NUMBER() OVER (ORDER BY AI.ALBUM_ID ASC) AS RNUM
               FROM imcsuser.PT_LA_ALBUM_INFO AI
                   , imcsuser.PT_LA_ALBUM_SUB S
               WHERE AI.ALBUM_ID = S.ALBUM_ID
                  AND AI.ALBUM_ID LIKE 'M%'
                  AND AI.ALBUM_ID NOT IN (SELECT ALBUM_ID FROM imcsuser.PT_LB_CUESHEET_MST WHERE NULLIF(ALBUM_ID,'') IS NOT NULL
                                                UNION ALL
                                                SELECT ALBUM_ID FROM imcsuser.PT_LB_CUESHEET_ITEM WHERE NULLIF(ALBUM_ID,'') IS NOT NULL
                                                UNION ALL
                                                SELECT ALBUM_ID FROM imcsuser.PT_LB_CUESHEET_ITEM_DETAIL WHERE NULLIF(ALBUM_ID,'') IS NOT NULL)
          AND AI.VOD_TYPE IN ('M', 'O')
      AND S.MUSIC_CONT_TYPE IN ('B', 'C', 'D', 'T')
                    
                     AND AI.ALBUM_ID NOT IN (SELECT ALBUM_ID FROM  imcsuser.PT_LA_ALBUM_RELATION  WHERE GROUP_TYPE = 'V' AND ALBUM_GROUP_ID = '304')
                    
                  
                    
     
                    AND AI.ALBUM_DATE   >=   '20220811000000'
                 
                 
                    AND AI.ALBUM_DATE   <=   '20220818235959'
                 
     ) A 
     WHERE A.RNUM BETWEEN 0 + 1 AND 0 + 10

     

    * 튜닝 쿼리 ( AND AI.ALBUM_ID NOT IN 부분을 EXISTS로 변경하고 UNION 부분의 Data 건수를 줄임 )


    SELECT /*VoteRelation.base.selectAlbumList*/
    A.TOTAL_CNT
       , A.RNUM
       , A.ALBUM_ID
       , A.ALBUM_NAME
       , TO_CHAR(TO_TIMESTAMP(A.ALBUM_DATE, 'YYYYMMDDHH24MISS'), 'YYYY-MM-DD') ALBUM_DATE
     FROM (
       SELECT /*+ LEADING(AI) INDEX(AI PK_PT_LA_ALBUM_INFO) USE_NL(AI S)*/
      AI.ALBUM_ID
    , AI.ALBUM_NAME 
      , AI.ALBUM_DATE
    , COUNT(AI.ALBUM_ID) OVER() AS TOTAL_CNT
    , ROW_NUMBER() OVER (ORDER BY AI.ALBUM_ID ASC) AS RNUM
       FROM imcsuser.PT_LA_ALBUM_INFO AI
       , imcsuser.PT_LA_ALBUM_SUB S
       WHERE AI.ALBUM_ID = S.ALBUM_ID
     AND AI.ALBUM_ID LIKE 'M%'
     AND exists (SELECT 1 FROM imcsuser.PT_LB_CUESHEET_MST WHERE NULLIF(ALBUM_ID,'') IS NOT null and ALBUM_ID <> AI.ALBUM_ID
    UNION ALL
    SELECT 1 FROM imcsuser.PT_LB_CUESHEET_ITEM WHERE NULLIF(ALBUM_ID,'') IS NOT null and ALBUM_ID <> AI.ALBUM_ID
    UNION ALL
    SELECT 1 FROM imcsuser.PT_LB_CUESHEET_ITEM_DETAIL WHERE NULLIF(ALBUM_ID,'') IS NOT null and ALBUM_ID <> AI.ALBUM_ID)
     AND AI.VOD_TYPE IN ('M', 'O')
     AND S.MUSIC_CONT_TYPE IN ('B', 'C', 'D', 'T')
       
       AND AI.ALBUM_ID NOT IN (SELECT ALBUM_ID FROM  imcsuser.PT_LA_ALBUM_RELATION  WHERE GROUP_TYPE = 'V' AND ALBUM_GROUP_ID = '304')
       
      
       
     
       AND AI.ALBUM_DATE   >=   '20220811000000'


       AND AI.ALBUM_DATE   <=   '20220818235959'

     ) A 
     WHERE A.RNUM BETWEEN 0 + 1 AND 0 + 10
Designed by Tistory.