안녕하세요.
MY SQL 에서 LEFT OUTER JOIN 내로 조건을 넣고 싶습니다.
즉, 외부에서 N건으로 좁혀진 ID에 대해서
LEFT OUTER JOIN으로 조건을 넣고 싶은데, EXPLAIN 해보니 FULL SCAN 하는것 같습니다.
(쿼리를 이렇게 밖에 쓸수 없는점 양해 부탁드립니다. ㅠㅠ)
SELECT ......
FROM 로그 K
LEFT OUTER JOIN (
SELECT BB.ID AS ID, AA.기준정보명 AS cf_type, BB.커스텀정보값 AS cf_value
FROM 기준정보 AA, 커스텀정보 BB
WHERE 1=1
AND AA.기준정보명 IN ('K29456', 'S3899954')
AND AA.기존정보명ID = BB.커스텀정보ID
) B ON K.ID = B.ID
LEFT OUTER JOIN (.....
)
WHERE 1=1
AND ID IN ('A', 'B', 'C', 'D', 'E')
밖에서 ID를 다섯개만 거릅니다. 이 ID 조건을 붉은색 쿼리 영역에 적용하고자 합니다.
즉, 위의 경우에 ID가 A, B, C, D, E인 값을 붉은색 쿼리영역(커스텀정보 BB 테이블)에 적용하고 싶은거죠..
그런데, EXPLAIN으로 뽑아보면 BB 테이블을 FULL SCAN 합니다. 5개 ID에 대한 값만 가져와야 하는데요.. ㅠㅠ
저 위의 쿼리를 돌리면 커스텀정보 BB 테이블 TYPE이 ALL 이 나옵니다. 다 가져온다음에 LEFT OUTER JOIN을 하는것 같습니다.
물론 붉은색 영역 안에 ID IN ('A', 'B', 'C', 'D', 'E') 를 넣으면 잘 탑니다. (이경우 인덱스 잘 탑니다.)
질문에 두서가 없습니다. 죄송합니다. 결론적으로 LEFT OUTER JOIN 의 JOIN 조건이 아닌 WHERE 조건으로
외부의 WHERE 또는 다른 INLINE VIEW의 값을 넘겨주고자 합니다.