두개의 테이블을 조인해서 가져오는거와 두개의 테이블을 하나로 만들어서 그냥 select하는것과의 속도차이를 테스트 했는데요.
일단 두개의 테이블 스키마는 다음과 같읍니다.
Table_A
deptno NUMBER PK,
dname CHAR(100),
loc CHAR(10)
TABLE_B
empno NUMBER PK,
ename CHAR(20),
sal NUMBER,
job CHAR(20),
deptno NUMBER FK( TableA , deptno )
그리고 위의 두테이블을 가지고하나로 만든 테이블 스키마는 다음과 같죠
TABLE_C
empno NUMBER PK,
ename CHAR(20),
sal NUMBER,
job CHAR(20),
deptno NUMBER,
dname CHAR(100)
TABLE C에는 index를 걸었읍니다. deptno에 대해서 말이죠.
그런후 다음과 같은 두개의 sql문을 날리니 오히려 JOIN문이 빠르더군요.
JOIN문
-------------------------------------
select b.empno,b.ename,b.sal,a.dname
from TABLE_A a, TABLE_B b
where a.deptno=b.deptno
and a.deptno >20
and b.sal>50000;
-------------------------------------
NOJOIN문
-------------------------------------
select empno,ename,sal,dname
from TABLE_C
where deptno>20
and sal>50000;
-------------------------------------
하지만 deptno > 20 과 같이 범위를 주지않고 =로 하면 NOJOIN문이 빠릅니다.
혹은 dname문을 like문등으로 하여도 NOJOIN문이 빠르구요.
왜 그런것인지 알려주세요..
그럼.
|