정규화 란?
예시로 학생컬럼이 있으면
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 같은 분산처리 엔진은 조인작업을 빠르게 하려고 한다
- 동등 조인은 최적화하기 쉬우므로 우선적으로 사용하는 것이 좋다.
- 조인 순서 변경은 내부 조인을 사용해 필터링하는 것과 동일한 효과를 누릴 수 있다.
- 브로드캐스트 조인 힌트를 사용하면 스파크가 쿼리 실행 계획을 생성할 때 지능적으로 계획을 세울 수 있다.
- 안정성과 최적화를 위해 카테시안 조인이나 전체 외부 조인 사용은 최대한 피해야 한다.
- 테이블 통계와 버켓팅은 조인에 상당한 영향을 미친다.
참고링크
'Dev' 카테고리의 다른 글
서버리스의 장단점 (0) | 2022.08.14 |
---|---|
파이썬 모듈 재설치, 초기화하는방법 (poppler 설치 후 에러) (0) | 2022.07.13 |
VSC에서 작업영역 구성하기 (Workspace) (0) | 2022.06.30 |
Python def, *args, **kwargs 정리 (0) | 2022.06.05 |
코랩자원 → 로컬로 끌어오기 (with ngrok) (0) | 2022.06.05 |