정미나, "유선배 SQL 개발자(SQLD) 과외노트", 시대고시기획
해당 책을 바탕으로 작성하였습니다.
그냥 개인적으로 다시 보고 공부하려고 만들었습니다.😀
데이터베이스의 성능을 향상시키기 위해 설계 단계부터 성능과 관련된 사항들이 모델링에 반영될 수 있다. 성능 데이터 모델링의 방법으로는 정규화, 반정규화, 테이블 통합, 테이블 분리 등이 있다.
데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔티티를 작은 단위로 분리하는 과정.
모든 속성은 반드시 하나의 값만 가져야 한다.
엔티티의 일반속성은 반드시 모든 주식별자에 종속되어야 함. 주식별자가 복합식별자인 경우 일반속성이 주식별자의 일부에만 종속되면 데이터 이상 현상이 발생할 수 있음.
주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.
지나친 정규화는 오히려 성능 저하를 일으킬 수 있다.
데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정.
조회 성능은 향상될 수 있으나 CRUD 성능은 저하될 수 있으며 데이터 정합성 이슈가 발생할 수 있음.
반정규화는 정규화가 끝난 후 시행.
업무 프로세스상 JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우 고려.
테이블 수직 분할
엔티티의 일부 속성을 별도의 엔티티로 분할(1:1 관계 성립)
테이블 수평 분할
엔티티의 인스턴스를 특정 기준으로 별도의 엔티티로 분할(파티셔닝)
중복 테이블 추가
데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 별도의 엔티티 추가.
통계 테이블 추가
통계치를 미리 계산하여 저장.
이력 테이블 추가
과거 데이터를 관리.
부분 테이블 추가
특정 속성을 자주 조회하는 경우 해당 특성만 부분 테이블로 생성.
중복 컬럼 추가
업무 프로세스상 JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려.
파생 컬럼 추가
프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식(상품의 재고 등).
이력 테이블 컬럼 추가
대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가해 놓는 방식(최신 데이터 여부 등).
업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려. 데이터 무결성을 깨뜨릴 위험 없이 데이터 처리 성능을 향상시킬 수 있음.
데이터를 조작하기 위한 하나의 논리적인 작업 단위.
예 : 추천수, 쿠폰 발급 등
존재하지 않음. 값이 없음.



SELECT * FROM TABLE WHERE COL IS NULL

=> COL이 NULL인 인스턴스를 반환
SELECT * FROM TABLE WHERE COL = NULL

=> COL = NULL의 결과는 항상 False이므로 아무 인스턴스도 반환 X.
즉 두 조건은 다르다!