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 - 뷰 정의에 쓰이는 쿼리 문법