안녕하세요! 언제나 고생이 많으십니다!! 아래와 같이IN절 때문에 쿼리 속도가 너무 느린데 다른 방법이 있을까요...? SELECT A.ITEM_CD , E.HIER_NM AS HIRCHY_CD_L1 , D.HIER_NM AS HIRCHY_CD_L2 , C.HIER_NM AS HIRCHY_CD_L3 , A.ITEM_NM , A.COMP_CD FROM BC_ITEM A LEFT JOIN BC_HIERARCHY C ON C.COMP_CD = A.COMP_CD AND C.HIER_CD = A.HIRCHY_CD AND C.HIER_TP = 'ITEM' LEFT JOIN BC_HIERARCHY D ON D.COMP_CD = A.COMP_CD AND D.HIER_CD = SUBSTR(A.HIRCHY_CD, 0, 8) AND D.HIER_TP = 'ITEM' LEFT JOIN BC_HIERARCHY E ON E.COMP_CD = A.COMP_CD AND E.HIER_CD = SUBSTR(HIRCHY_CD, 0, 4) AND E.HIER_TP = 'ITEM' WHERE A.COMP_CD = '2200' AND A.STATUS = 'A' AND (A.ITEM_CD LIKE '%'||'641571'||'%' OR A.ITEM_NM LIKE '%'||'641571'||'%') AND A.ITEM_CD IN ( SELECT F.ITEM_CD /* 456건 */ FROM SD_CUST_ORDER_ITEM F JOIN BC_CUST G ON F.CUST_CD = G.CUST_CD AND F.COMP_CD = G.COMP_CD WHERE F.DATA_TP = 'RETURN' AND F.COMP_CD = '2200' AND (G.CUST_CD LIKE '%'||'1000313'||'%' OR G.CUST_NM LIKE '%'||'1000313'||'%') ) ORDER BY E.HIER_NM , D.HIER_NM , C.HIER_NM , A.ITEM_CD DESC
실행계획이 있다면 좋을 텐데요. in절을 콕찝어 느려진다고 말씀하신 것을 보아하니, 해당 구문을 빼면 빠르게 실행된다는 것으로 판단됩니다.
이에 의심되는 지점을 말씀드려봅니다.
A.ITEM_CD
-> 이 컬럼에 인덱스가 없다면 넣어보세요.
G.CUST_CD LIKE '%'||'1000313'||'%' OR G.CUST_NM LIKE '%'||'1000313'||'%'
-> G.CUST_CD, G.CUST_NM 에 인덱스가 있나요? 있다면 '%키워드%' 구문은 인덱스를 사용하지 못합니다.
-> G.CUST_CD, G,CUST_NM 에 '키워드%' 한번 해보세요.(결과가 같다면)