Postgresql / PPAS/Query tuning
[완료]/*VoteRelation.base.selectAlbumList*/
원샷원따봉
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 |