DB

[MySQL] CREATE TEMPORARY TABLE 완벽 가이드 사용법(임시테이블)

인생아 2025. 1. 8. 09:38
반응형

MySQL CREATE TEMPORARY TABLE은 특정 작업에서 임시 데이터를 저장하고 활용하기 위해 사용하는 매우 유용한 명령어입니다. 임시 테이블(Temporary Table)은 서버 세션 동안만 존재하며, 작업이 끝나거나 세션이 종료되면 자동으로 삭제됩니다. 이 글에서는 CREATE TEMPORARY TABLE의 주요 기능, 문법, 사용법, 다양한 예제 및 활용 방법을 상세히 설명합니다.

CREATE TEMPORARY TABLE이란?

임시 테이블(Temporary Table)은 데이터를 임시로 저장하고 조작하기 위해 생성됩니다. 일반적으로 복잡한 쿼리를 최적화하거나 중간 결과를 저장하는 데 사용됩니다. 임시 테이블은 서버의 메모리와 디스크를 효율적으로 사용하여 성능을 개선할 수 있는 기능을 제공합니다.

CREATE TEMPORARY TABLE의 주요 특징

  1. 세션 범위 제한: 임시 테이블은 생성한 세션에서만 접근할 수 있으며, 다른 세션에서는 접근할 수 없습니다.
  2. 자동 삭제: 세션이 종료되면 임시 테이블이 자동으로 삭제됩니다.
  3. 동일 이름 허용: 서로 다른 세션에서 동일한 이름의 임시 테이블을 생성할 수 있습니다.
  4. 데이터 분리: 임시 테이블은 실제 데이터베이스 테이블과 독립적으로 작동합니다.

기본 문법

CREATE TEMPORARY TABLE table_name (
    column_name data_type [constraints],
    ...
);
  • table_name: 생성할 임시 테이블의 이름.
  • column_name: 테이블에 포함될 컬럼의 이름.
  • data_type: 컬럼의 데이터 유형.
  • constraints: 컬럼에 추가할 제약 조건(예: PRIMARY KEY, UNIQUE 등).
반응형

CREATE TEMPORARY TABLE의 활용 사례

  1. 대규모 데이터를 처리하기 위한 임시 저장소.
  2. 반복적으로 사용되는 중간 계산 결과를 저장하여 쿼리 성능 최적화.
  3. 복잡한 조인을 간단하게 처리하기 위한 데이터 분리.

CREATE TEMPORARY TABLE 사용 예제

1. 기본적인 임시 테이블 생성

CREATE TEMPORARY TABLE temp_sales (
    id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(255),
    quantity INT,
    sale_date DATE
);

위 코드는 temp_sales라는 임시 테이블을 생성하며, 기본 키로 id를 설정하고, 상품명, 판매 수량, 판매 날짜를 저장하는 구조를 정의합니다.

2. 데이터 삽입

INSERT INTO temp_sales (product_name, quantity, sale_date)
VALUES 
('Laptop', 10, '2024-12-20'),
('Mouse', 50, '2024-12-21');
반응형

3. 데이터 조회

SELECT * FROM temp_sales;

결과:

id product_name quantity sale_date
1 Laptop 10 2024-12-20
2 Mouse 50 2024-12-21

4. 임시 테이블과 기존 테이블의 조인

SELECT 
    t.product_name, 
    t.quantity, 
    p.price 
FROM 
    temp_sales t
JOIN 
    products p 
ON 
    t.product_name = p.product_name;

위 예제는 temp_sales 임시 테이블과 products라는 실제 테이블을 조인하여 데이터를 조회합니다.

5. 복잡한 쿼리 최적화

CREATE TEMPORARY TABLE temp_high_sales AS
SELECT 
    product_name, 
    SUM(quantity) AS total_quantity
FROM 
    sales
GROUP BY 
    product_name
HAVING 
    total_quantity > 100;

이 예제는 판매량이 100개 이상인 상품의 집계 데이터를 저장하는 temp_high_sales 임시 테이블을 생성합니다.

6. 임시 테이블 삭제

DROP TEMPORARY TABLE IF EXISTS temp_sales;

임시 테이블을 명시적으로 삭제하는 방법입니다. 세션 종료 시 자동으로 삭제되지만, 필요시 수동으로 삭제할 수 있습니다.

반응형

CREATE TEMPORARY TABLE 사용 시 주의사항

  1. 세션 범위: 임시 테이블은 생성한 세션 내에서만 유효하며, 다른 세션에서는 접근이 불가능합니다.
  2. 이름 충돌 방지: 동일 이름의 임시 테이블과 실제 테이블이 공존할 수 없으므로, 이름 충돌을 주의해야 합니다.
  3. 메모리 사용량: 임시 테이블이 메모리를 많이 사용할 경우 서버 성능에 영향을 미칠 수 있습니다.
  4. 스토리지 엔진: 기본적으로 InnoDB 엔진이 사용되며, 테이블 생성 시 변경이 가능합니다.

고급 활용 사례

1. 임시 테이블에 인덱스 추가

CREATE TEMPORARY TABLE temp_orders (
    order_id INT,
    customer_id INT,
    total_amount DECIMAL(10, 2),
    INDEX (customer_id)
);

이 코드는 customer_id에 인덱스를 추가하여 쿼리 성능을 향상시킵니다.

2. SELECT 결과로 임시 테이블 생성

CREATE TEMPORARY TABLE temp_top_customers AS
SELECT 
    customer_id, 
    SUM(total_amount) AS total_spent
FROM 
    orders
GROUP BY 
    customer_id
ORDER BY 
    total_spent DESC
LIMIT 10;

이 코드는 가장 많은 금액을 소비한 상위 10명의 고객 데이터를 임시 테이블에 저장합니다.

CREATE TEMPORARY TABLE의 장점

  • 성능 최적화: 복잡한 계산이나 조인을 임시 테이블에 저장하여 실행 속도를 개선.
  • 코드 가독성: 쿼리를 단순화하고 유지보수를 용이하게 함.
  • 안정성: 세션 범위에서만 유효하므로 다른 사용자에게 영향을 주지 않음.

공식 가이드문서

MySQL 공식 문서 : https://dev.mysql.com/doc/refman/8.0/en/

반응형