정규화 란?

예시로 학생컬럼이 있으면

a학교 학생1
b학교 학생2

이렇게 되어있는 데이터를 테이블 2개로 만든다(정규화)

테이블1 (학교코드, 학교명 )
1, a학교
2, b학교
3, c학교

테이블2 ( 학교코드, 학생명 )
1, 쫑긋
2. 쫑쫑긋
3. 김쫑긋
3. 쫑긋긋

역정규화란 ?

근데 반대로 이걸 역정규화 한다는 말은

a학교, 쫑긋
b학교, 쫑쫑긋
c학교, 김쫑긋
c학교, 쫑긋긋

이렇게 하면 디비관점에서는 index도 느리고, 비대해지는 테이블로 짜증나는 테이블이다.

근데도 일부러 역정규화를 해서 넣는다

단점이 있는데 왜 역정규화를 하나요?

보통은 몇가지의 목적때문에 이런방식을 사용한다

  • NoSQL 은 대부분 사실상 조인이 불가능해서, NoSQL 스토리지 쓸때는 역정규화를 한다
  • 많은 조인을 하지 않으려고
  • 한번에 데이터에 대한 정보, 전체를 보기 위해서
  • 잘개 쪼개진 정규화된 테이블을 조인에 조인에 조인을 (*n) 걸면 조회하는 속도가 오래 걸려서
  • 큰테이블(역정규화) - 작은테이블(정규화, 디멘션만 적용) 해서 사용하려고

Spark 같은 분산처리 엔진은 조인작업을 빠르게 하려고 한다

  • 동등 조인은 최적화하기 쉬우므로 우선적으로 사용하는 것이 좋다.
  • 조인 순서 변경은 내부 조인을 사용해 필터링하는 것과 동일한 효과를 누릴 수 있다.
  • 브로드캐스트 조인 힌트를 사용하면 스파크가 쿼리 실행 계획을 생성할 때 지능적으로 계획을 세울 수 있다.
  • 안정성과 최적화를 위해 카테시안 조인이나 전체 외부 조인 사용은 최대한 피해야 한다.
  • 테이블 통계와 버켓팅은 조인에 상당한 영향을 미친다.

참고링크

jjongguet