DB index
DB 인덱싱
인덱싱은 DB에 색인을 남기는 것 (책의 목차와 같음)
RDBMS에서 대용량의 데이터가 있을 때, 특정 데이터를 검색하기 위해서 테이블의 레코드를 full scan 하는 것이 아니라 인덱스가 적용된 컬럼의 테이블(컬럼, 인덱스 주소)을 따로 파일로 저장해 놓고 그것을 검색해서 검색 효율을 높이는 방법
- 데이터의 양이 많고, 검색이 변경보다 잦은경우
- 인덱스를 사용하고자 하는 컬럼의 값이 다양한 경우
위와 같은 때 DB 인덱싱을 사용하면 효과를 볼 수 있음
장점
- 인덱스를 걸게 되면 SELECT 속도가 빨라짐
단점
- 테이블 생성시에 인덱스의 정보도 만들게 되므로 생성속도가 느려짐
- index 테이블을 만들기에 용량이 늘어남
- UPDATE나 INSERT, DELETE가 많이 발생하는 테이블에서는 성능 감소
RDBMS VS NOSQL
관계형DB
장점
- 데이터의 성능이 일반적으로 좋아 정렬, 탐색, 분류가 빠름
- 신뢰성이 높아 데이터의 무결성을 보장
- 정규화에 따른 갱신 비용을 최소화
단점
- 기존에 작성된 스키마를 수정하기 어려움
- 데이터베이스의 부하를 분석하기 어려움
- 빅데이터를 처리하는데 매우 비효율적임
NoSQL(비관계형 DB)
특징
- 거대한 Map으로서 key-value 형식을 지원함
- 관계형 db와 달리 PK,FK JOIN등 관계를 정의하지 않음
- 스키마에 대한 정의가 없음
장점
- 대용량 데이터 처리를 하는데 효율적
- 읽기 작업보다 쓰기 작업이 더 빠르고 관계형 데이터베이스에 비해 쓰기와 읽기 성능이 빠름
- 데이터 모델링이 유연함
- 복잡한 데이터 구조를 표현할 수 있음
단점
- 중복된 데이터가 변경된 경우 여러개의 콜렉션에서 데이터를 바꿔야함
정규화
목적
- 불필요한 데이터 제거
- 데이터 중복 최소화
- 이상 현상을 방지하기 위하여 (삽입이상, 갱신이상, 삭제이상)
- 데이터 저장을 논리적으로
1차 정규화
- column이 원자값을 가진다
- 각 로우마다 컬럼의 값이 1개만 있어야함
2차 정규화
- 기본키중에 특정 컬럼에만 종속된 컬럼(부분적 종속)이 없어야 함
- 복합키의 경우
- 부분적 함수 종속 제거
3차 정규화
- 기본키가 아닌 속성들은 기본키에만 의존
- 이행적 함수 종속 제거
Ref
DB 인덱스 : itholic 블로그
SQL : coconut-obsessed 블로그