본문 바로가기
Database

오라클 MATERIALIZED VIEW로 데이터 캐싱하기

by 굿센스굿 2024. 12. 4.
반응형

 

데이터베이스 성능을 최적화하는 방법 중 하나로 Materialized View를 활용한 데이터 캐싱이 있습니다. Materialized View는 데이터의 결과를 물리적으로 저장하여 반복적인 쿼리 요청 시 빠르게 데이터를 제공하는 데 유용합니다. 이번 글에서는 Materialized View의 개념과 사용법, 그리고 세 가지 예시를 통해 실제로 어떻게 활용할 수 있는지 알아보겠습니다.

1. Materialized View란?

Materialized View는 SQL 쿼리의 결과를 물리적으로 저장하는 뷰입니다. 일반적인 View는 가상 테이블로, 쿼리를 실행할 때마다 결과를 생성합니다. 반면, Materialized View는 쿼리 결과를 디스크에 저장하여 동일한 쿼리를 반복적으로 실행할 필요 없이 저장된 결과를 빠르게 조회할 수 있습니다. 이는 특히 대용량 데이터 처리나 복잡한 쿼리 실행 시 유용합니다.

주요 특징

  • 물리적 저장: 쿼리 결과를 디스크에 저장하여 반복적인 데이터 조회 시 성능 향상
  • 자동 갱신: 주기적으로 데이터 업데이트 가능
  • 복잡한 쿼리 최적화: 복잡한 연산을 미리 계산하여 저장

2. Materialized View의 사용법

Materialized View를 생성하는 기본적인 구문은 다음과 같습니다:

CREATE MATERIALIZED VIEW 뷰_이름
BUILD IMMEDIATE 
REFRESH [COMPLETE | FAST | FORCE] 
ON [COMMIT | DEMAND]
AS
SELECT ... FROM ...;
  • BUILD IMMEDIATE: 뷰 생성 시 데이터를 즉시 저장
  • REFRESH 옵션: 데이터를 갱신하는 방법과 시점 설정
    • COMPLETE: 전체 데이터를 다시 계산
    • FAST: 변경된 부분만 갱신
    • FORCE: 가능한 경우 FAST, 그렇지 않으면 COMPLETE
    • ON COMMIT: 트랜잭션 커밋 시 데이터 갱신
    • ON DEMAND: 수동으로 데이터 갱신

3. Materialized View의 예시

예시 1: 판매 데이터 요약

대규모 판매 데이터를 처리하는 예시입니다. 매일 수백만 건의 판매 데이터가 발생할 때, 이를 요약하여 보고서를 생성하는 과정에서 Materialized View를 활용할 수 있습니다.

CREATE MATERIALIZED VIEW mv_daily_sales_summary
BUILD IMMEDIATE 
REFRESH FAST ON COMMIT
AS
SELECT
    sale_date,
    product_id,
    SUM(quantity) AS total_quantity,
    SUM(total_amount) AS total_sales
FROM
    sales
GROUP BY
    sale_date,
    product_id;

이 Materialized View는 sales 테이블의 데이터를 요약하여 일별, 제품별 판매량과 총 판매액을 저장합니다. 트랜잭션이 커밋될 때마다 빠르게 갱신됩니다.

예시 2: 사용자 활동 로그

사용자 활동 로그 데이터를 기반으로 일별 활동 요약을 저장하는 예시입니다. 이 데이터를 활용하여 사용자 행동 분석을 효율적으로 수행할 수 있습니다.

CREATE MATERIALIZED VIEW mv_user_activity_summary
BUILD IMMEDIATE 
REFRESH COMPLETE ON DEMAND
AS
SELECT
    activity_date,
    user_id,
    COUNT(*) AS activity_count
FROM
    user_activity_log
GROUP BY
    activity_date,
    user_id;

이 Materialized View는 사용자 활동 로그 데이터를 일별, 사용자별로 요약하여 저장합니다. 데이터 갱신은 수동으로 이루어지며, 필요할 때마다 갱신할 수 있습니다.

예시 3: 재고 관리

재고 관리 시스템에서 특정 카테고리의 제품 재고 현황을 효율적으로 관리하는 예시입니다.

CREATE MATERIALIZED VIEW mv_category_inventory
BUILD IMMEDIATE 
REFRESH FAST ON COMMIT
AS
SELECT
    category_id,
    product_id,
    SUM(stock_quantity) AS total_stock
FROM
    inventory
GROUP BY
    category_id,
    product_id;

이 Materialized View는 재고 데이터를 카테고리별, 제품별로 요약하여 총 재고량을 저장합니다. 재고 데이터가 변경될 때마다 빠르게 갱신됩니다.

4. 결론

Materialized View는 대규모 데이터베이스 시스템에서 성능을 최적화하는 강력한 도구입니다. 데이터를 물리적으로 저장하여 반복적인 쿼리 요청 시 빠른 응답을 제공하며, 다양한 갱신 옵션을 통해 유연하게 활용할 수 있습니다. 위의 세 가지 예시를 통해 실제로 어떻게 적용할 수 있는지 살펴보았습니다. 데이터베이스 성능 향상을 위해 Materialized View를 적극적으로 활용해 보세요.

반응형