본문 바로가기
WIKI 기술 지식 베이스

CREATE MATERIALIZED VIEW

원문 보기 위키 갱신

CREATE MATERIALIZED VIEW는 미리 계산된 쿼리 결과를 저장하고 자동으로 갱신하는 머터리얼라이즈드 뷰를 만들어요.

출처: 문서

본문

**Turso 확장 기능**: 머터리얼라이즈드 뷰는 SQLite에는 없는 Turso 전용 기능이에요. 이 기능은 실험적이며 사용 전에 [활성화](/sql-reference/experimental-features)해야 해요.

머터리얼라이즈드 뷰는 미리 계산된 쿼리 결과를 디스크에 저장하고, 증분 뷰 유지(Incremental View Maintenance, IVM)로 자동으로 최신 상태를 유지해요. 표준 뷰와 달리, 머터리얼라이즈드 뷰를 읽을 때는 기반이 되는 SELECT를 다시 실행하지 않아요.

문법

CREATE MATERIALIZED VIEW [IF NOT EXISTS] view-name AS select-statement;

매개변수

매개변수 설명
IF NOT EXISTS 같은 이름의 머터리얼라이즈드 뷰가 이미 있을 때 오류를 막아줘요. 뷰가 있으면 문은 아무 것도 하지 않아요.
view-name 데이터베이스 안에서 고유한 머터리얼라이즈드 뷰 이름.
select-statement 머터리얼라이즈드 뷰의 내용을 정의하는 SELECT 쿼리.

증분 뷰 유지(IVM)의 동작 방식

머터리얼라이즈드 뷰의 기반이 되는 테이블의 데이터를 수정하면, Turso는 같은 트랜잭션 안에서 머터리얼라이즈드 뷰를 증분적으로 갱신해요. 수동 REFRESH 단계는 없어요. 머터리얼라이즈드 뷰는 언제나 기본 테이블과 일관성을 유지해요.

  • 머터리얼라이즈드 뷰의 변경은 기본 테이블의 변경과 함께 커밋되거나 롤백돼요.
  • COUNT, SUM, AVG 같은 집계는 효율적으로 유지돼요 — Turso는 변경이 일어날 때마다 전체 결과 집합을 다시 계산하지 않아요.

현재 제한 사항

  • 머터리얼라이즈드 뷰 정의에서 모든 SQL 함수가 지원되는 건 아니에요.
  • 머터리얼라이즈드 뷰는 다른 뷰나 머터리얼라이즈드 뷰를 참조할 수 없어요.
  • TEMPORARY 수정자는 머터리얼라이즈드 뷰에서 지원되지 않아요.

예제

미리 계산된 집계

CREATE TABLE orders (
    id INTEGER PRIMARY KEY,
    customer_id INTEGER,
    amount REAL,
    created_at TEXT
);

-- Precompute per-customer totals
CREATE MATERIALIZED VIEW customer_totals AS
SELECT
    customer_id,
    COUNT(*) AS order_count,
    SUM(amount) AS total_spent
FROM orders
GROUP BY customer_id;

-- Fast read — no aggregation at query time
SELECT * FROM customer_totals WHERE total_spent > 1000;

자동 갱신

-- When new orders are inserted, customer_totals updates automatically
INSERT INTO orders VALUES (1, 100, 59.99, '2025-01-15');
INSERT INTO orders VALUES (2, 100, 24.50, '2025-01-16');

-- Reflects both inserts without a manual refresh
SELECT * FROM customer_totals WHERE customer_id = 100;
-- customer_id: 100, order_count: 2, total_spent: 84.49

필터링된 요약

CREATE MATERIALIZED VIEW recent_activity AS
SELECT
    customer_id,
    COUNT(*) AS recent_orders
FROM orders
WHERE created_at >= '2025-01-01'
GROUP BY customer_id;

더 알아보기 (Learn more)

  • CREATE VIEW - 표준(머터리얼라이즈드가 아닌) 뷰
  • DROP VIEW - 머터리얼라이즈드 뷰 제거하기
  • SELECT - 뷰 정의에 쓰이는 쿼리 문법