[sql] 반정규화를 위한 성능 향상 기법
관계형 데이터베이스 정규화는 중복을 제거하고 데이터 일관성을 유지하는 데 도움이 됩니다. 그러나 대량의 데이터 처리 및 복잡한 쿼리의 성능을 향상시키는 측면에서는 제한적일 수 있습니다. 이때 반정규화를 적용하여 성능을 향상시킬 수 있습니다.
반정규화란?
반정규화는 정규화된 테이블을 중복이 발생하더라도 의도적으로 중복을 허용하는 과정입니다. 주로 읽기 성능을 향상시키는 데 사용됩니다.
반정규화를 위한 기법
- 테이블 통합
- 자주 함께 사용되는 테이블을 하나로 통합하여 조인 연산을 줄입니다.
CREATE TABLE combined_table AS SELECT t1.column1, t1.column2, t2.column3 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id;
- 자주 함께 사용되는 테이블을 하나로 통합하여 조인 연산을 줄입니다.
- 컬럼 추가
- 자주 사용되는 조인 조건으로 사용되는 컬럼을 다른 테이블에 추가하여 조인 연산을 최적화 합니다.
ALTER TABLE table_name ADD column_name datatype;
- 자주 사용되는 조인 조건으로 사용되는 컬럼을 다른 테이블에 추가하여 조인 연산을 최적화 합니다.
- 인덱스 추가
- 반정규화된 테이블에 인덱스를 추가하여 조회 성능을 향상시킵니다.
CREATE INDEX index_name ON table_name (column_name);
- 반정규화된 테이블에 인덱스를 추가하여 조회 성능을 향상시킵니다.
반정규화 주의사항
- 데이터 불일치: 중복으로 인해 데이터 불일치 문제가 발생할 수 있으므로 주의가 필요합니다.
- 유지보수 어려움: 중복된 데이터의 변경이 필요할 경우 모든 테이블을 업데이트해야 하며, 이로 인해 유지보수가 어려워질 수 있습니다.
반정규화는 성능 최적화를 위한 강력한 도구이지만, 신중하게 고려해야 합니다. 최적의 성능과 데이터 일관성을 동시에 유지하기 위해 반정규화를 적용할 때는 전략적인 판단이 필요합니다.
참고 자료
- Oracle, “Normalization”
- “Database Design - Normalization or Denormalization?” by Edoardo Marcora, March 6, 2018