Join 명령
조건 : T1에 C1과 C2가 있고 T2에 C3와 C4가 있다.
SQL : select T1.C1, T1, C2, T2, C4 from T1 join T2 on T1.C1=T2.C3 where T1.C1 = '1'
주로 사용하는 방식의 Join명령이다. 하지만 이것도 데이터의 수가 많으면 문제가 된다.
T1의 C1을 기준으로 T2의 C3와 매칭시켜 뽑아 오는 Query문인데 이런 경우는 이렇게 처음 부터 만들면 나중에 데이터가 많아지더라도 크게 문제가 되지 않는다.
select VT1.C1, VT2.C2, T2.C4 from (select C1, C2 from T1 where C1='1') VT1 join T2 on VT1=T2
Full scan 이 일어날 만한 명령을 사전에 차단해버리는 방법이다.
Hint 를 주지 않는 경우
조건 : T1에는 C1, C2, C3가 있고 C1과 C2에 각각 Index1과 Index2가 걸려 있다.
SQL : select C1, C2 from T1 where C2 = '1'
이런 경우는 특정 인덱스를 타라고 선언해주는 쪽이 나중에 성능 문제가 발생하지 않을 소지가 높다.
다시말해 이렇게 바꾸도록 하자
MSSQL : select C1, C2 from T1 with (INDEX (index2)) where C2='1'
Oracle : select /*+INDEX(index2) */ C1, C2 from T1 where C2='1'
원문 : http://www.wolfpack.pe.kr/category/13
'ms-sql' 카테고리의 다른 글
테이블 및 컬럼 설명값 가져오기 (1) | 2010.11.04 |
---|---|
ms-sql 쿼리 튜닝 (0) | 2010.10.20 |
ms-sql db Link (4) | 2010.10.18 |
ms-sql 2005 설치 (1) | 2010.10.18 |
OPENXML(MS-SQL SP) (1) | 2010.10.18 |