C.W.K.
Stream
Lesson 10 of 10 · published

Generated Column

~10 min · generated-columns, schema

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Derived 값, 자동으로

Generated column = 같은 row 의 다른 컬럼 위 표현식으로 계산. 두 flavor:

  • VIRTUAL — read 시 계산; 추가 storage X. 명시 안 하면 기본.
  • STORED — write 시 계산 + row 에 저장; read 빠름, 공간 차지.

자주 query 되는 derived 값 (예: email 의 도메인, content blob 길이, JSON-extracted 필드). Generated column 인덱싱 가능 — STORED 면 매우 빠른 lookup.

Tip: STORED generated column + 인덱스가 query 성능 위해 derived 값 materialize 하는 가장 깔끔한 방법, UPDATE trigger 작성 X. Schema 가 derivation enforce, inconsistent 값 실수로 저장 불가.

Code

Generated column — VIRTUAL + STORED·sql
CREATE TABLE users (
  id        INTEGER PRIMARY KEY,
  email     TEXT NOT NULL UNIQUE,
  email_lc  TEXT GENERATED ALWAYS AS (lower(email)) VIRTUAL,
  domain    TEXT GENERATED ALWAYS AS (substr(email, instr(email,'@')+1)) STORED
) STRICT;

-- Stored generated column 인덱싱
CREATE INDEX idx_users_domain ON users(domain);

INSERT INTO users(email) VALUES ('Alice@Gmail.com'), ('bob@example.com');

SELECT email, email_lc, domain FROM users;
-- Alice@Gmail.com | alice@gmail.com | Gmail.com
-- bob@example.com | bob@example.com | example.com

External links

Exercise

본인 테이블에 generated column 3 개 추가: TEXT 컬럼 lower-cased 버전, JSON 컬럼의 JSON-extracted scalar, content 길이 컬럼. 하나 인덱싱. EXPLAIN QUERY PLAN 으로 인덱싱된 컬럼 query 가 인덱스 사용 확인. 어느 게 VIRTUAL, 어느 게 STORED 일지 결정.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.