아래 테이블이 두개 있는데요
TABLE1 에는 데이터가 좀 많이 있어서 조건절에 항상 일자가 (FROM ~ TO)가 들어갑니다.
TABLE2에도 어느정도 데이터가 있고 암호화필드(SEC_FIELD1)가 들어있어서 암호화필드에 대해 검색
조건이 들어갈경우 복호화(SEC_DECODE_UTF8) 함수를 사용하여 비교해야 하는데요
1. 복호화하기전에 TABLE2의 데이터를 줄이기 위해 TABLE1과 먼저 조인하여 TABLE1의 일자만큼 제외한 후 나온 데이터로 복호화하여 비교하는게 맞을까요? 이런 경우 TABLE1을 쿼리에 두번 쓰게 되는것 같아서요.
2. 아니면 빨간색 부분처럼 IN절 SUBQUERY안에 조건을 줄 경우 1번 방법과 속도가 같을지 아니면 SUBQUERY가 먼저 풀려 빨간색 부분 자체가 필요가 없는건지요? (IN 대신 EXISTS를 사용해도 같을지요?)
3. 더 나은 방법이 있으면 조언 부탁드립니다.
SELECT *
FROM TABLE1 A
WHERE A.DATE BETWEEN '20120820' AND '20120831'
AND A.SEQ IN (SELECT SEQ
FROM TABLE2
WHERE SEC_DECODE_UTF8(SEC_FIELD1) LIKE '가나다%'
AND SEQ = B.SEQ
) |