약 100만개의 레코드를 가지고 있는 A, B 두개의 테이블이 있습니다.
두개의 테이블 구조는 정확하게 같고, PERSON_ID, AGE, SEX 등... 14개의 필드를 가지고 있습니다
PERSON_ID 가 두개의 테이블에서 각각 유니크 합니다.
A, B 테이블에 있는 PERSON_ID 들이 99% 정도는 같고 1% 정도가 다릅니다.
같은 PERSON_ID의 갯수와 같지 않은 PERSON_ID의 갯수를 확인하기 위해서 아래와 같은 쿼리를 시행하였습니다.
SELECT count(*) from B
WHERE B.PERSON_ID
NOT IN
(SELECT A.PERSON_ID from A)
이렇게 하니까 5초만에 9437 이라는 결과를 줍니다.
그런데....
SELECT count(*) from B
WHERE B.PERSON_ID
IN
(SELECT A.PERSON_ID from A)
이렇게 NOT IN 을 IN 으로 바꾸어서 쿼리를 실행하니까 20~30분이 지나도록 결과를 내지 못합니다.
SELECT count(*) from B
INNER JOIN A
ON B.PERSON_ID = A.PERSON_ID
이렇게 조인을 이용해도 20~30분 지나도 결과를 얻지 못했습니다.
왜 그런건가요? 두개의 테이블에서 같은 PERSON_ID의 갯수를 세는 좋은 방법은 무엇인지요?
두개의 테이블은 csv 파일을 mysql db에 넣은 거라 key나 index 가 설정되어 있지 않습니다.
감사합니다. |