Database/Oracle
ORACLE|임시 테이블(Temp Table)
어느가을빛
2014. 10. 23. 13:14
Oracle8i Server 이상에서 부터 지원 하는 Temp Table은 사용자의 트랜잭션 또는 세션 내에서만 Temp Table의 데이터를 활용 할 수 있으며 사용자 세션이 중단되면 Temp Table의 있는 모든 내용은 자동으로 삭제 된다. Temp Table을 사용하는 목적은 큰 정렬 작업이나, 필요할 경우 임의적으로 생성 하여 사용 할 수 있다.
Temp Table의 특징
- Temp Table 데이터는 해당 세션이나 트랜잭션에서만 볼 수 있다.
- Global Temp Table은 모든 세션에서 볼 수 있다.
- Local Temp Table은 이를 생성한 세션이 끝나면 더 이상 유지되지 않는다.
- Temp Table 데이터는 세션이 사용하는 정렬 공간 내에 저장되며, 정렬 공간이 데이터를 수용하기에 충분하지 않으면 사용자의 임시 테이블스페이스에 공간이 할당된다.
- Temp Table에 대한 인덱스의 범위 및 지속 기간은 대응하는 테이블의 범위 및 지속 기간과 동일하다.
- Temp Table 테이블에 대해 트리거 및 뷰를 정의할 수 있으나, Temp Table과 일반 Table을 조인하도록 뷰를 정의할 수 없다.
- CREATE GLOBAL TEMPORARY TABLE AS SELECT 명령을 사용하여 Temp Table을 생성하고 여기에 데이터를 삽입할 수 있다.
- Temp Table 정의는 엑스포트하거나 임포트할 수 있다.
Temp Table 생성
Temp Table을 사용 하는 경우는 복잡한 Query를 실행할 때 임시 테이블을 사용하여 성능을 향상시킬 목적으로 사용한다. 예를 들어 여러 개의 복잡한 Query를 실행하면 반환된 각 행에 대한 테이블이 여러 번 액세스되므로 상대적으로 속도가 저하 된다. 복잡한 Query에서 값을 Temp Table 저장한 다음 Temp Table에서 Query를 실행하는 것이 속도가 훨씬 빠르다.
- ON COMMIT DELETE ROWS는 트랜잭션 내에서만 행을 볼 수 있도록 지정 (기본값)
- ON COMMIT PRESERVE ROWS는 전체 세션에서 행을 볼 수 있도록 지정
이렇게 생성된 Temp Table은 DBA_TABLES 뷰에서 확인 할 수 있으며, DURATION 열은 테이블의 데이터가 전체 세션 동안 유지될 것인지, 해당 트랜잭션 내에서만 유지될 것인지를 나타낸다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -- 임시 테이블 생성 CREATE GLOBAL TEMPORARY TABLE AAAA_TEMP( A VARCHAR2(15) NOT NULL , B NUMBER NOT NULL ) ON COMMIT [PRESERVE ROWS | DELETE ROWS ]; -- 서브 쿼리를 이용한 임시 테이블 생성 CREATE GLOBAL TEMPORARY TABLE [ TABLE NAME ]( ) ON COMMIT [PRESERVE ROWS | DELETE ROWS ]; AS ([SUB QUERY CLAUSE]) -- 임시 테이블 조회 SELECT TABLE_NAME, TEMPORARY , DURATION FROM USER_TABLES WHERE TEMPORARY = 'Y' --[PRESERVE ROWS] 트랜잭션의 종료 (commit)후에도 남아있음 세션종료시 데이터가 삭제됨 --[DELETE ROWS] 트랜잭션의 종료와 함께 삭제됨 --[SUB QUERY CLAUSE] SELECT된 테이블의 구조와 같이 테이블 생성
|
#출처: http://devworks.tistory.com/9