각종 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을 사용할 것을 권장하게 된다
'기타 개념정리' 카테고리의 다른 글
SQL에서 인덱스가 필요한 이유 (0) | 2021.02.02 |
---|---|
SQL에서 Alias를 사용하는 이유 (0) | 2021.01.29 |
MySQL 에서 쿼리를 소문자로 작성해야 하는 이유 (0) | 2021.01.28 |
인터페이스 테이블 개념정리 (0) | 2021.01.26 |
MSA(Microservices Architecture) 개념 및 장단점 정리 (0) | 2021.01.19 |
댓글