티스토리 뷰
역정규화
- 성능이나 개발의 편의성을 위해서 테이블의 구조를 바꾸는 것
- 여러 대의 서버로 데이터를 분산할 때 사용할 수 있다.
조인 줄이기
많은 조인은 시스템에 부하를 줄 수 있기 때문에 조인을 줄여서 부하를 줄일 수 있다.
조인을 하지 않고 테이블을 조회할 수 있도록 컬럼을 추가했다.
하지만, topic_tag_relation 테이블은 중복이 발생하고 tag 테이블이 존재하면서 동시에 tag_name 컬럼이 존재하는 중복도 같이 발생해버렸다.
계산 작업을 줄이기
GROUP BY와 같은 명령어는 데이터가 많은 경우 많은 비용이 발생할 수 있다.
SELECT author_id, COUNT(author_id)
FROM topic
GROUP BY author_id
topic_count 컬럼을 추가해서 쿼리를 대체할 수 있다. 하지만 항상 topic_count의 값을 계속 갱신해야 하는 부담이 생긴다.
컬럼을 기준으로 테이블을 분리
용량이 큰 description 컬럼을 분리함으로서 성능을 향상시킬 수 있다. 그리고 두 테이블 모두 사용량이 많다면 각각의 테이블을 다른 시스템에 저장해서 쓰기/읽기를 수행함으로서 분산을 통해 성능 향상을 시킬 수 있다.(샤딩)
행을 기준으로 테이블을 분리
author_id 1~1000, 1000~2000 같은 식으로 따로 분리하고 1~1000 사이의 사용자는 topic_1000에 요청을 보내도록 설계할 수 있다.
관계의 역정규화
author_id 1의 tag name을 조회하고 싶은 경우 너무 많은 조인이 발생할 수 있다.
SELECT tag.id, tag.name
FROM topic_tag_relation AS TTR
LEFT JOIN tag ON TTR.tag_id = tag.id
LEFT JOIN topic ON TTR.topic_title = topic.title
WHERE author_id = 1
아래와 같이 테이블을 변경하면 조인 한번으로 조회할 수 있다.
SELECT tag.id, tag.name
FROM topic_tag_relation AS TTR
LEFT JOIN tag ON TTR.tag_id = tag.id
WHERE TTR.author_id = '1'
참고
'Database' 카테고리의 다른 글
우아한테크캠프 Pro 5기 - Redis에 저장 중 LocalDateTime 데이터타입에서 SerializationException 발생 (5) | 2023.01.31 |
---|---|
정규화(normalization) (0) | 2022.06.25 |
리눅스에서 MariaDB 설치 및 기본 설정 (0) | 2021.03.31 |
윈도우에서 mariaDB 서버 on/off (0) | 2020.12.28 |
MariaDB 사용법 및 기본 쿼리문 (0) | 2020.12.21 |
댓글