INSERT SELECT 성능 개선 기본 전략

 

  • CTE는 SQL에서 쿼리 안에서 일시적으로 생성되는 임시 결과 집합입니다.
  • WITH 키워드를 사용하여 정의하며, 하나의 쿼리에서 반복적으로 사용할 수 있고 가독성과 성능 최적화에 매우 유용합니다.

CTE 기본 구조

WITH cte_name AS (
    SELECT 컬럼1, 컬럼2
    FROM 테이블
    WHERE 조건
)
SELECT * FROM cte_name;


CTE의 장점

  • 복잡한 쿼리 단순화 : 긴 쿼리를 여러 단계로 나눠 작성할 수 있습니다.
  • 재사용성 : 하나의 CTE를 여러 번 호출해도 실제 실행은 한 번만 수행됩니다.
  • 가독성 : 코드가 더 깔끔해지고 유지보수가 쉬워집니다.
  • 임시 테이블 대체 : 세션마다 유지되는 임시 테이블을 생성하지 않아도 됩니다.

예제 1: 중복 계산 방지

WITH dept_avg AS (
    SELECT department_id, AVG(salary) avg_salary
    FROM employees
    GROUP BY department_id
)
SELECT e.employee_id, e.first_name, e.salary, d.avg_salary
FROM employees e
JOIN dept_avg d ON e.department_id = d.department_id
WHERE e.salary > d.avg_salary;
  • dept_avg CTE에서 AVG(salary)를 한 번만 계산하고, 이후의 JOIN에서 반복적으로 사용합니다.

예제 2: 재귀 CTE 사용 (자기 자신 호출)

WITH RECURSIVE emp_hierarchy (emp_id, manager_id, level) AS (
    SELECT employee_id, manager_id, 1
    FROM employees
    WHERE manager_id IS NULL
    UNION ALL
    SELECT e.employee_id, e.manager_id, h.level + 1
    FROM employees e
    JOIN emp_hierarchy h ON e.manager_id = h.emp_id
)
SELECT * FROM emp_hierarchy;
  • 재귀 CTE를 사용하여 상위 관리자부터 하위 직원까지 계층 구조를 탐색할 수 있습니다.

CTE 활용 팁

  • 동일한 서브쿼리를 여러 번 작성할 필요 없이 한 번 작성하고 반복 사용.
  • WITH절을 사용하여 쿼리를 단계별로 작성하면 쿼리 튜닝이 더 쉬워집니다.
  • 대규모 데이터 처리 시에도 성능 향상에 효과적입니다.


다음 이전