Database 일반2009. 3. 12. 22:21


select ...
from a, b
where a.col1 = b.col1
   and b.col2 like 'abc%'
   and a.col2 in (select col2 from c where condition)

라는 SQL이 있다고 할때 SQL의 구조를 바꾸지 않고 in절의 sub쿼리가 항상 먼저 실행되도록 만들어라. 최소 3가지 이상의 방법을 고민해 보고 장단점을 생각해보자.


특정 테이블을 명시하지 않은 것은 위의 테이블이 어떤 테이블이건 그리고 어떤 조인을 사용하는지에 상관없어야 하기 때문이다. 보통의 경우 in subquery는 조인후에 실행된다. (항상 그런건 아니고 단순히 확률을 말함) 만약 위 쿼리문이 Hash 로 풀린다면 먼저 in subquery가 실행되는것과 a, b 조인후에 in subquery가 실행되는 것은 하늘과 땅차이다. 물론 NL이나 SM도 많은 차이를 가진다. 문제는 위 쿼리가 어떤 실행계획을 사용하든지 상관없어야 하고 또 이전 조인 방법을 바꾸지 않아야 하기 때문에

select ...
from c, a, b
where ....

와 같은 식으로 바꿔서는 안된다는 점이다.

'Database 일반' 카테고리의 다른 글

Database - Oracle Hint  (0) 2009.03.07
Database - Plan 이해  (0) 2009.03.07
Database Quiz - count  (0) 2009.02.13
Database Quiz - 함수의 활용  (0) 2009.02.07
Database Quiz - 실행계획 유도  (0) 2009.02.07
Posted by bleujin