파생 컬럼

원본이 바뀌는 순간 함께 갱신하면 읽기는 빨라집니다

합계, 개수, 평균처럼 다른 테이블이나 컬럼에서 계산된 값을 저장해 두는 패턴입니다. 대신 갱신 시점을 놓치면 원본과 저장값의 일관성이 깨집니다.

출발점

원본 데이터에 변경이 생김

order_items 추가, 댓글 삭제, 리뷰 등록처럼 계산의 재료가 달라집니다.

→

상태 변화

파생 컬럼도 같은 트랜잭션에서 갱신

증감이면 바로 반영하고, 평균·합계면 다시 계산해 저장합니다.

COUNT ±1 / SUM 재계산 / AVG 재계산
→

읽기 결과

조회 시 계산 부담이 줄어듦

주문 합계 표시, 게시글 목록 정렬, 사용자 등급 판단이 즉시 가능합니다.

어떤 값을 저장하나
언제 어떻게 바뀌나
운영상 의미

주문 합계

주문서가 열릴 때마다 다시 합산하지 않도록 저장

orders.total_amount = SUM(price * qty)

order_items 변경 시 전체 금액을 다시 계산해 주문 행에 반영

결제 직전 화면, 주문 이력 조회에서 바로 사용

게시글 댓글 수

목록 화면에 필요한 개수를 미리 보관

posts.comment_count = COUNT(comments)

댓글 INSERT/DELETE 때 +1 / -1 로 즉시 반영

게시글 목록 정렬과 요약 표시가 빨라짐

사용자 주문 횟수

사용자 단위 누적 행동을 저장

users.order_count = COUNT(orders)

주문 생성 시 횟수를 증가시켜 최신 상태 유지

회원 등급, 혜택 조건 판단에 바로 사용

상품 평균 별점

리뷰 요약 값을 상품 행에 저장

products.avg_rating = AVG(reviews.rating)

리뷰 등록/삭제 시 평균을 다시 계산

상품 목록과 검색 결과에서 즉시 노출 가능

나이

생년월일에서 계산되지만 시간이 지나면 의미가 바뀜

EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM birth_date)

데이터 변경 없이도 해마다 값이 달라져 저장값이 쉽게 오래됨

이런 값은 저장형보다 Virtual Column 이 더 자연스러움