LEFT OUTER JOIN 내로 조건이 좁혀질수 있나요? 0 1 2,041

by captain [2015.10.01 21:11:51]


안녕하세요.

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의 값을 넘겨주고자 합니다.

 

by 창조의날개 [2015.10.02 10:33:15]

 

왜 인라인뷰 안에 넣어도 되는 조건을 구지 밖으로 빼시려고 하는지요?

 

오라클 같은 경우 DBMS가 자동으로 해석해서 인라인뷰 밖에 조건을 주어도 인라인뷰 안으로 끌고 들어가기도 하지만 MYSQL 은 그정도 까지는 못하는 걸로 알고 있습니다.

 

물론 오라클이라고 할지라도 가능하면 쿼리를 만들때 인라인뷰 안에 조건을 넣어 주는게 좋겠죠..

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입