임시 테이블 (Temp Table) vs CTE (Common Table Expression) vs 뷰 (View)

Tony·약 18시간 전

DB

목록 보기
7/7

주요 차이점 요약

특징임시 테이블 (Temp Table)CTE (Common Table Expression)뷰 (View)
저장 위치tempdb (디스크/메모리)주로 메모리 (일시적)정의만 저장 (가상 테이블)
수명세션 종료 시 자동 삭제단일 쿼리문 내명시적 삭제 전까지 유지
인덱스지원지원 안 함지원 안 함 (Materialized View 제외)
재사용성세션 내 여러 번 참조 가능단일 쿼리 내 여러 번 참조영구적 재사용 가능
최적화통계 정보 활용 가능복잡할 경우 성능 저하매번 쿼리 재실행
적합한 경우대용량 데이터, 반복 조인코드 가독성, 재귀 쿼리복잡한 로직 재사용, 보안

상세 비교

1. 임시 테이블 (Temp Table) - #TableName

  • 특징: 물리적 디스크 공간을 사용하므로 대용량 데이터 처리에 유리합니다.
  • 장점: 인덱스를 생성하여 조인 성능을 향상시킬 수 있고, 통계 정보를 기반으로 최적화가 가능합니다.
  • 단점: 테이블 생성 및 삭제 비용이 발생하며, 대량 데이터 처리 시 tempdb 부하가 발생할 수 있습니다.

2. CTE (Common Table Expression) - WITH 절

  • 특징: WITH 키워드로 정의되는 가독성 좋은 임시 결과 집합입니다.
  • 장점: 복잡한 쿼리를 단계별로 나누어 작성할 때 가독성이 매우 뛰어나며, 재귀적 쿼리 처리가 가능합니다.
  • 단점: 동일한 CTE를 여러 번 참조할 때 매번 재계산될 수 있어 대용량 데이터에서는 성능이 떨어질 수 있습니다.

3. 뷰 (View)

  • 특징: 저장된 쿼리(Virtual Table)로, 데이터를 직접 저장하지 않고 호출될 때마다 원본 테이블을 조회합니다.
  • 장점: 자주 사용하는 복잡한 조인 로직을 미리 정의하여 재사용할 수 있고, 특정 컬럼만 보여주는 보안 용도로 활용됩니다.
  • 단점: 인덱스가 없는 경우 뷰를 조회할 때마다 기반 테이블을 풀 스캔하여 성능이 느려질 수 있습니다.

결론: 무엇을 선택해야 할까?

대용량 데이터를 다루거나, 중간 결과에 인덱스가 필요하다면 Temp 테이블을 사용합니다.
복잡한 쿼리를 논리적으로 나누어 가독성을 높이고 싶다면 CTE를 사용합니다.
자주 사용하는 복잡한 조인 쿼리를 여러 사람이 재사용해야 한다면 View를 사용합니다.

profile
움직이는 만큼 행복해진다

0개의 댓글