테이블을 데이타를 복제하기 위해서 보통 DUAL 을 이용한 테이블을 많이 사용합니다.
그런데 프로젝트를 하다 보니 복제를 위한 숫자를 가진 테이블을 만들어 사용하는 경우도 있더군요.
해당 컬럼에 PK 를 잡아서...
그래서 둘의 차이점을 한번 비교해 보았습니다.
1) DUAL
SELECT aaa.*
FROM aaa
, ( select level as seq
from dual
connect by level <= 3)
2) 테이블 이용
SELECT aaa.*
FROM aaa
, copy_temp
WHERE seq <= 3
PLAN
1) DUAL 사용시
DUAL COST : 3, cadinaltiy : 1 , I/O : 2
*최종결과 : cadinality : 10, byte : 2840
2) 테이블 사용시
테이블 : COST : 0, cadinality : 3, I/O : 0
* 최종결과 cadinality : 30 , byte : 8610
해석에 조금 엇갈리는 부분이 있는데 cost 나 I/O 를 보면 테이블이 이용한 것이 좋은데 - 인덱스를 이용해서라고 추정됨 )
최종 결과는 dual 을 이용한 것이 나아 보입니다. cadinality 와 byte 가 증가하지 않아서요.
여러분들은 어떤 방식을 이용하시는지요?