[SQL튜닝기초]IN 보다는 EXISTS, 조인을 이용하자!
대부분 아시겠지만 아래 IN을 이용하는 방식보다는 EXISTS, JOIN을 이용하는 방식이 효율적이다.
SELECT d.dept_id, d.dept
FROM dept d
WHERE EXISTS ( SELECT 'X' FROM employee e WHERE e.dept = d.dept);
SELECT DISTINCT d.dept_id, d.dept
FROM dept d,employee e
WHERE e.dept = e.dept;
아래의 쿼리를 보자.
1. IN을 이용한 방식
SELECT *
FROM tableA
WHERE tableA.id IN (SELECT tableB.id FROM tableB WHERE title = 'TOPCREDU');
2. EXISTS를 이용한 방식
SELECT *
FROM tableA
WHERE EXISTS (SELECT 1 FROM tableB WHERE title = 'TOPCREDU' AND tableA.id = tableB.id);
3. 조인을 이용한 방식
SELECT *
FROM tableA
JOIN tableB
ON tableA.id = tableB.id
WHERE tableB.title = 'TOPCREDU';
IN을 이용하게 되면 서브쿼리 전체를 먼저 스캔하고 tableA의 모든 레코드에 대해
IN에서 추출된 데이터와 비교하게 되므로 서브쿼리의 추출되는 레코드가 많다면 성능이 저하됩니다.
EXISTS와 조인을 이용하는 방법은 비교해서 참 또는 거짓만 리턴하므로 서브쿼리의
추출되는 데이터가 많다면 훨씬 좋은 성능을 보이게 됩니다.
댓글 없음:
댓글 쓰기