2012년 10월 23일 화요일

실행계획 데이터베이스 튜닝 - 실행계획분석 06

집합 연산자에 의해 생성되는 실행 계획

UNION ALL - (A 합집합 B) + (A 교집합 B)
UNION - (A 합집합 B)
MINUS - (A 차집합 B)

UNION ALL을 제외한 모든 집합 연산자는 항상 UNIQUE 값을 추출한다.

UNIQUE 한 값을 추출하기 위해서는 SORT(UNIQUE) 실행 계획을 이용한다. - 대용량의 정렬은 성능이 저하될 수 있다.

-----

UNION ALL 집합 연산자는 UNION ALL 실행 계획이 생성되며 CONCATENATION 실행 계획과 동일하다.

다른 집합 연산자와 달리 SORT(UNIQUE) 실행 계획이 생성되지 않는다.

----

UNION 집합 연산자

UNION ALL 집합 연산자와의 차이는 SORT(UNIQUE) 실행 계획의 유무 - 즉, 중복 데이터를 제거한다.

대용량의 데이터에 UNION ALL 집합 연산자와 UNION 집합 연산자를 사용한 것의 데이터가 동일하다면 반드시 UNION ALL 집합 연산자를 사용해야 한다.

----

MINUS 연산자는 두 집합에 대해 각각 UNIQUE 정렬을 수행한다. 각각 UNIQUE 정렬을 수행한 후에 동일한 데이터를 제외한다.

안티 조인과 MINUS 연산자는 데이터의 속성에 따라 동일한 결과를 추출할 수도 있고 아닐 수도 있다.

두 개의 집합이 UNIQUE 한 값이라면 안티 조인과 동일한 결과가 추출될 것이다. 이러한 경우에는 안티 조인이 유리한 경우가 많다.

MINUS 연산자는 SORT(UNIQUE) 실행 계획에 의해 정렬을 수행하므로 시스템 자체의 자원을 많이 사용한다. 특히, 디스크 I/O와 관련해서 많은 자원을 사용할 것이다.

----

VIEW 실행 계획

VIEW 실행 계획은 VIEW 실행 계획 밑에 있는 테이블이나 인덱스에 엑세스하여 메모리에 임시 집합을 생성한다.

데이터에 한 번 엑세스한 후에 해당 데이터를 가공하는 부분에서는 VIEW 실행 계획이 생성된다.

FROM 절 안에 있는 완전한 SQL에 의해 VIEW 실행 계획이 생성될 수 있다.

하지만 FROM 절의 SQL이 별도로 수행되는 것이 아니라 해당 SQL이 하나로 합쳐져서 수행될 수 있다. 이렇게 수행된다면 VIEW 실행 계획은 생성되지 않는다.

VIEW 실행 계획에서 추출된 데이터는 메모리에 저장되며, 그러므로 인덱스가 존재할 수 없다. 그렇기 때문에 VIEW 실행 계획으로 만들어진 집합과 다른 집합이 조인을 수행하게 되면 VIEW 실행 계획에서 만들어진 집합에 전체 스캔이 수행될 수도 있다. 이러한 현상은 SQL의 성능을 좌우한다.

댓글 없음:

댓글 쓰기