-
..조인과 하위쿼리..DB/Ms.SQL 2007. 8. 21. 00:13
..일반적인 상황에서는(아주 평범한 과정) 하위쿼리를 사용하는 것이 조인을 사용하는 것보다 성능상 유리하다.
..하지만 이러한 상황에서는 각각 틀릴수가 있다..
- 상황1.
하위쿼리에서 반환하는 값이 외부쿼리에 있는 모든 행에 대해 동일하다.
- 답변
미리쿼리한다.변수를 선언하고 필요한 값을 변수로 선택한 다음 하위쿼리를 한번만 실행하도록 하여 그 결과를 외부 테이블에 전달한다.
- 상황2.
양쪽 테이블이 모두 작다(레코드의 수가 10,000개 이하이다.)
- 답변
하위쿼리를 사용한다.정확한 이유는 말하기 힘들지만 여러 테스트를 해본 결과가 그렇다.조회와 조인의 성능차이 대문으로 보인다.
- 상황3.
모든 조건에 맞는 하나의 값을 반환한다.
- 답변
하위 쿼리. 하나의 레코드를 찾는 것이 전체 테이블을 조인하는 것보다 빠르다.
- 상황4
모든 조건에 맞는 소수의 값을 반환하며 조회 열에 인덱스가 없다.
- 답변
하위쿼리. 하나의 조회 또는 소수의 조회는 해시 조인에 비해 빠르다.
- 상황5
조회 테이블이 상대적으로 작지만 기반 테이블이 크다.
- 답변
가능하다면 중첩된 하위쿼리를 사용하고, 상호 관련된 하위 쿼리가 필요할 경우는 조인을 사용한다. 하위쿼리를 사용하면 조회가 한번만 이루어지며 오버레드가 적다. 하지만 상호 관련된 하위쿼리의 경우 조회가 여러번 수행되어야 하므로 조인을 하는 것이 더 낫다.
- 상황6
상호 관련된 하위쿼리와 조인
- 답변
조인을 사용한다. 상호 관련된 하위 쿼리는 중첩된 루프를 만들기 때문에 오버헤드가 발생한다.커서를 사용하는 것보다는 빠르지만 다른 방법이 있다면 다른 방법을 사용해야 한다.
- 상황7
파생 테이블 또는 다른 방법
- 답변
파생 테이블은 오버헤드가 상당하다.따라서 주의깊게 사용해야 한다.실행되는 것이 무엇이며 메모리내에 있는지 확인하자.대부분의 오버레드는 내부 생성 작업으로 인해 발생하며 인덱스가 없으면 결과 집합이 커질 수 있다. 상황에 따라 변수가 많으므로 테스트가 필요하다.
- 상황8
EXISTS 또는 다른 방법
- 답변
EXISTS를 사용한다. 일치하는 하나의 값을 찾기 위해 여러번 조회할 필요가 없다. 특정한 행에 맞는 하나의 값만 찾는 경우라면 EXISTS가 좋은 선택이며, 성능면에서 상당히 유리하다.'DB > Ms.SQL' 카테고리의 다른 글
특수한 데이터 형식 (0) 2012.02.05 [MSSQL] 소유자변경 (0) 2011.06.23 데이터 생성기법 (0) 2009.09.24 BULK INSERT (0) 2008.07.22 ..SQL SERVER가 자동으로 저장 프로시저의 실행계획을 다시 작성하는경우.. (0) 2007.08.20