MYSQL 자동형변환으로 인한 조인 조건 문제
#MYSQL쿼리문
#A테이블 100만건 B테이블 1000만건이 있다고 가정한상태로 좋은형태의 쿼리문을 작성하고 싶습니다.
SELECT A.NNTX_NO, B.NNTX_NO
FROM (
SELECT 1772 NNTX_NO FROM DUAL
UNION ALL
SELECT 1773 NNTX_NO FROM DUAL
) A
LEFT JOIN (
SELECT '1772' NNTX_NO FROM DUAL
UNION ALL
SELECT '1772.0 ~ 34' NNTX_NO FROM DUAL
) B ON A.NNTX_NO = B.NNTX_NO
WHERE 1=1
AND A.NNTX_NO = 1772
;
#결과
#A.NNTX_NO B.NNTX_NO
#1772 1772
#1772 1772.0 ~ 34 <---조인이 걸리지 말았어야 했던 레코드
#아마도 CCXX_KEY 문자열이 앞쪽부분이 숫자로 인식이되고 공백이하의 문자부터는 짤려서 1772.0숫자로 인식되서 조인이 되는거같음.
#질문. 쿼리문을 어떤식으로 바꿔야 가장효율이 좋을가요?
#예상1) 키값형태를 바꿔야 한다. 키구조의 설계를 다시해봐라.
#예상2) FORM절의 WHERE조건이 이미걸려있음으로 조인시에 A.NNTX_NO를 문자형으로 형변한 해야한다.
#예상3) 조인시에 B.NNTX_NO 형변환, 문자변환을 해야 A.NNTX_NO 의 인덱스를 탈수있다.
#예상4) 2개의 테이블로 많은 쿼리들이 생성될수 있음으로, 무조건 LEFT테이블 컬럼을 형변환하여 사용한다.
#많은 가름침 부탁드립니다. 별문제가 다생기네요..
|