안녕하세요 아래 쿼리와 같이 DATE_K값을 읽어서 같은 데이터를 가져오는 쿼리인데 속도가...너무 느려서 문의 드립니다.
A 테이블에 ID_T 데이터는
12
123|3DSFA|FFF|TTT|UTEKCCC
3DSFA@@FFF@@WTQERQ
123
이런식으로 들어가있습니다.
WITH DATA_K 데이터는
123
FFF
12
이렇게 유일한 값으로 들어가있습니다
조인을 할수 없어서 INSRT로 문자열 찾아서 하는데 속도가 너무 많이 걸립니다.
A 테이블 데이터건수는 88,000 정도 이고 WITH DATA_K는 300건정도 됩니다.
어떻게 풀어야 성능이 향상이 될까요??
GROUP BY 를 한이유는 A 테이블에 ID_T 데이터가 중복데이터가 있어서 GROUP BY를 한겁니다.
WITH DATA_K AS
(
SELECT ID_T FROM T_TABLE1 UNION ALL
SELECT ID_T FROM T_TABLE2 UNION ALL
SELECT ID_T FROM T_TABLE3 UNION ALL
SELECT ID_T FROM T_TABLE4 UNION ALL
SELECT ID_T FROM T_TABLE5 UNION ALL
)
SELECT A.ID_T
, A.NAME_T
, A.TITME_T
, A.CODE_T
, A.DT_T
FROM TARGET_T A
, DATE_K B
WHERE A.CODE_T ='TTT'
AND INSTR (A.ID_T, B.ID_T) > 0
GROUP BY
A.ID_T
, A.NAME_T
, A.TITME_T
, A.CODE_T
ORDER BY A.DT_T
-- 조인 후 Distinct -- SELECT DISTINCT a.id_t , a.name_t , a.time_t , a.code_t FROM target_t a , data_k b WHERE a.code_t = 'TTT' AND b.id_t IN ( REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 1) , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 2) , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 3) , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 4) , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 5) , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 6) , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 7) , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 8) , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 9) ) ; -- Distinct 후 Exists -- SELECT * FROM (SELECT DISTINCT a.id_t , a.name_t , a.time_t , a.code_t , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 1) id_1 , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 2) id_2 , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 3) id_3 , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 4) id_4 , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 5) id_5 , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 6) id_6 , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 7) id_7 , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 8) id_8 , REGEXP_SUBSTR(a.id_t, '[^|@]+', 1, 9) id_9 FROM target_t a WHERE a.code_t = 'TTT' ) a WHERE EXISTS (SELECT 1 FROM data_k b WHERE b.id_t IN ( a.id_1 , a.id_2 , a.id_3 , a.id_4 , a.id_5 , a.id_6 , a.id_7 , a.id_8 , a.id_9 ) ) ;