TEMPORARY TABLE(임시 테이블)은 데이터베이스에서 특정 세션이나 트랜잭션 동안 임시 데이터를 저장하고 처리하기 위해 사용하는 테이블입니다. 오라클에서 임시 테이블은 GLOBAL TEMPORARY TABLE이라는 이름으로 제공되며, 데이터를 영구적으로 저장하지 않고, 세션이 종료되거나 트랜잭션이 완료되면 자동으로 삭제되는 특징이 있습니다.
임시 테이블은 대량의 데이터 처리, 일시적인 데이터 저장, 중간 결과 관리 등에 유용하게 활용됩니다. 이번 글에서는 임시 테이블의 개념, 생성 방법, 활용 사례, 그리고 주의사항에 대해 알아보겠습니다.
1. TEMPORARY TABLE의 개념
- 임시 데이터 저장:
- 임시 테이블은 데이터 처리를 위해 일시적으로 데이터를 저장할 수 있는 테이블입니다.
- 범위:
- 세션(Session) 동안 유지하거나, 트랜잭션(Transaction)이 끝나면 데이터가 사라집니다.
- 목적:
- 중간 연산 결과 저장.
- 대량 데이터 가공 시 효율성 증대.
- 여러 단계로 구성된 복잡한 쿼리에서 성능 최적화.
- 특징:
- 데이터는 임시적으로 유지되지만, 테이블 구조는 영구적입니다.
- 여러 세션 간 데이터가 독립적으로 관리됩니다.
2. 임시 테이블 생성
오라클에서는 CREATE GLOBAL TEMPORARY TABLE 명령을 사용하여 임시 테이블을 생성합니다.
기본 구문
CREATE GLOBAL TEMPORARY TABLE 테이블명 (
컬럼1 데이터타입,
컬럼2 데이터타입,
...
) ON COMMIT [DELETE ROWS | PRESERVE ROWS];
- ON COMMIT 옵션:
- DELETE ROWS: 트랜잭션이 끝날 때 테이블의 데이터가 삭제됩니다.
- PRESERVE ROWS: 트랜잭션이 끝나도 데이터가 유지되며, 세션이 종료될 때 삭제됩니다.
예제 1: 트랜잭션 범위 임시 테이블
CREATE GLOBAL TEMPORARY TABLE temp_sales (
sale_id NUMBER,
product_id NUMBER,
sale_amount NUMBER
) ON COMMIT DELETE ROWS;
- 트랜잭션이 끝나면 테이블의 데이터가 삭제됩니다.
예제 2: 세션 범위 임시 테이블
CREATE GLOBAL TEMPORARY TABLE temp_sales_session (
sale_id NUMBER,
product_id NUMBER,
sale_amount NUMBER
) ON COMMIT PRESERVE ROWS;
- 트랜잭션이 끝나도 데이터가 유지되며, 세션 종료 시 삭제됩니다.
3. TEMPORARY TABLE의 활용 사례
(1) 대량 데이터 처리
복잡한 연산 중간에 생성된 데이터를 저장하여 쿼리 성능을 최적화할 수 있습니다.
-- 대량 데이터를 처리하기 위해 임시 테이블에 저장
INSERT INTO temp_sales (sale_id, product_id, sale_amount)
SELECT sale_id, product_id, sale_amount
FROM sales
WHERE sale_date BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-12-31', 'YYYY-MM-DD');
-- 임시 테이블의 데이터를 기반으로 추가 연산
SELECT product_id, SUM(sale_amount) AS total_sales
FROM temp_sales
GROUP BY product_id;
(2) 보고서 생성
보고서 생성을 위한 일시적인 데이터를 저장하고 조작할 수 있습니다.
-- 특정 조건에 맞는 데이터를 임시 테이블에 저장
INSERT INTO temp_sales_session
SELECT sale_id, product_id, sale_amount
FROM sales
WHERE region_id = 101;
-- 임시 테이블 데이터로 보고서 생성
SELECT product_id, COUNT(*) AS sale_count, SUM(sale_amount) AS total_revenue
FROM temp_sales_session
GROUP BY product_id;
(3) 복잡한 쿼리 간소화
임시 테이블을 사용해 복잡한 쿼리를 간소화하고 가독성을 높일 수 있습니다.
-- 중간 결과를 임시 테이블에 저장
INSERT INTO temp_sales
SELECT sale_id, product_id, sale_amount
FROM sales
WHERE sale_amount > 1000;
-- 임시 테이블에서 최종 집계 수행
SELECT product_id, AVG(sale_amount) AS avg_amount
FROM temp_sales
GROUP BY product_id;
4. TEMPORARY TABLE 사용 시 주의사항
- 테이블 구조는 영구적:
- 임시 테이블의 스키마(컬럼 구조)는 영구적이며, DROP TABLE 명령으로 삭제해야 합니다.
- 데이터의 수명:
- 데이터는 세션 또는 트랜잭션 범위 내에서만 유지되며, 자동으로 삭제됩니다.
- 동시성 처리:
- 각 세션에서 독립적으로 데이터를 저장하므로, 여러 사용자가 동시에 사용해도 데이터 충돌이 발생하지 않습니다.
- 성능:
- 임시 테이블은 데이터를 TEMP 테이블스페이스에 저장하며, 대량 데이터 처리 시 I/O 부담이 있을 수 있습니다. 필요한 경우 인덱스를 추가하여 성능을 최적화할 수 있습니다.
- 관리:
- 임시 테이블을 자주 사용하는 경우, 테이블스페이스와 사용량을 모니터링해야 합니다.
5. 임시 테이블과 대안 비교
특징 임시 테이블 (TEMPORARY TABLE) WITH 절 (Common Table Expression)
데이터 저장 | 물리적 저장 | 메모리에서 처리 |
수명 | 세션 또는 트랜잭션 동안 유지 | 쿼리 실행 시 일시적 유지 |
복잡한 연산 | 여러 단계 처리 가능 | 단일 쿼리로 처리 |
성능 | 대량 데이터 처리 시 적합 | 간단한 연산에 적합 |
6. 결론
TEMPORARY TABLE은 오라클 데이터베이스에서 대량의 임시 데이터를 효율적으로 관리하고 처리하는 데 매우 유용한 도구입니다. 세션 및 트랜잭션 범위 내에서 데이터가 독립적으로 관리되기 때문에 복잡한 데이터 연산과 다중 사용자 환경에서도 안정적으로 사용할 수 있습니다. 임시 테이블의 특징과 활용법을 익혀 실무에서 데이터 처리 성능을 최적화해 보세요!
'Database' 카테고리의 다른 글
오라클 데이터 딕셔너리 뷰 이해하기 (0) | 2024.12.04 |
---|---|
오라클 CLUSTER 테이블 사용법 (0) | 2024.12.04 |
오라클 PARTITION 테이블의 이해와 활용 (0) | 2024.12.04 |
오라클 SQL*Loader로 데이터 대량 삽입하기 (0) | 2024.12.04 |
오라클 MERGE로 데이터 병합하기 (2) | 2024.12.03 |