2016년 10월 5일 수요일

[SQL학원,오라클학원☞탑크리에듀][SQL튜닝기초]IN 보다는 EXISTS, 조인을 이용하자!

[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와 조인을 이용하는 방법은 비교해서 참 또는 거짓만 리턴하므로 서브쿼리의
추출되는 데이터가 많다면 훨씬 좋은 성능을 보이게 됩니다.

댓글 없음:

댓글 쓰기