본문 바로가기
기타 개념정리

SQL IN EXISTS JOIN 성능 비교 및 용도 정리글

by wakestand 2021. 1. 28.
반응형

각종 SQL에서 데이터 조회 시

IN EXIST INNER JOIN을 사용해 조회를 하게 되는데

 

여기서 IN, EXIST, INNER JOIN 중

뭘 써야 성능이 가장 좋은가 싶을거다

일단 정답은 몇백~몇천건을 조회하는 정도라면

의미있는 차이가 없기 때문에 아무거나 써도 되는데

여기서 가장 사용하기 쉽고 직관적인 IN이 유리하다

 

따라서 대부분은 사용하기 쉬운 IN만을 주로 사용하다

대량의 데이터를 조회하는 경우(몇만~몇십만건)에

IN을 사용하게 되면 조회 속도가 급격하게 느려지게 되는데

 

IN을 사용하면 테이블의 모든 컬럼 값을 직접 비교하기 때문에

대량의 데이터를 조회하는 시점에서 문제가 생기는 것이다

 

여기서 자연스럽게 EXISTS를 사용하게 되는데

EXISTS는 해당 값이 TRUE/FALSE냐 만을 비교하기 때문에

대량의 데이터 조회 시 IN보다 훨씬 빠르다

 

주의할 점은 IN보다 사용하기 어렵고

IN은 NULL을 인식하지 못해서 NVL(오라클), IFNULL(MySQL)

등으로 처리를 해 줘야 하지만

EXISTS는 처리를 하지 않아도 된다는 특징이 있다

 

마지막으로는 INNER JOIN을 사용하는 경우인데

IN, EXISTS 보다 더 빠르다는 특징이 있지만

 

문제는 INNER JOIN은 다양한 용도로 사용하기 때문에

IN EXISTS에 비해 직관적이지 못하고 가독성이 떨어진다

여기에 JOIN 조건을 동일한 값이 존재하는 테이블로 설정했을 경우

나오면 안될 여러 행들이 출력되기도 한다

 

이제 정리해보자면 결론은 간단하다

조회하는 데이터가 많지 않을 경우(몇백~몇천) - IN

조회하는 데이터가 그보다 많을 경우 - EXISTS

매우 빠른 속도가 필요할 경우 - INNER JOIN

 

이게 속도가 빠른게 당연히 좋은거긴 한데

INNER JOIN 만을 사용하다 보면

가독성도 떨어지고 작성 시간도 오래 걸리는데

실제 일하다 보면 쿼리를 짜는데 정해진 기간이 무한정이 아니므로

빠르게 효율적인 쿼리를 짜내야 하는데

대부분의 쿼리는 몇백~몇천개를 조회하는 수준에 그치기 때문에

IN을 사용해도 아무 상관이 없는 것이다

 

DB 사용에 있어서 신적인 존재에 가까운 DBA에게

IN을 사용한 쿼리를 들고가서 물어봐도

대량의 데이터를 조회할 것이 아니라면

대부분의 데이터 조회 시에는 IN을 사용해도 아무 상관없고

그보다 많을때는 EXISTS, INNER JOIN을 사용할 것을 권장하게 된다

반응형

댓글