세 가지 포인트!
1. OS 캐시 활용 - Table 설계 잘 하자!
- 데이터가 많아질 수록 대충정의한 한 column 이 가지는 용량은 어마어마 해진다.
varchar(20)
이면 충분한 column 에varchar(256)
을 적용하지 말자!
- 테이블의 정규화!
- 쿼리시 join 에 따른 성능 하락과 데이터 측면에서의 정규화를 잘 저울질 하자
2. 인덱스의 중요성
- 인덱스 = 색인
- 탐색 성능을 높이기 위해 적용하는 자료구조
- MySQL 의 인덱스는 기본적으로 B+ 트리를 활용한다
ex) 데이터 4,000만 건 테이블 에서의 탐색
- 인덱스 없음 -> 선형탐색 Full Table Scan = O(n). 최대 4,000만번 탐색
- 인덱스 있음 -> B트리로 이분탐색 = O(n) 최대 25.25번 탐색
- 쿼리에 대해 인덱스가 동작하는지 explain 명령어로 확인 할 수 있다.
- 복수 칼럼을 동시에 index 를 태우고자 할 경우에는 복합 인덱스를 사용해야 한다.
3. 확장을 전제로한 시스템 설계
이전 챕터의 마지막 강의에서 살펴본
국소성을 살리는 분산
은 결국 DB 계층에서는 DB 파티셔닝을 의미한다.설계시 DB 계층 뿐만 아니라 애플리케이션 계층에서도 DB의 확장성을 고려할 필요가 있다.
마스터/슬레이브 (DB Clustering) 방식의 특징
- 슬레이브는 확장 - 참조계열 쿼리
- 마스터는 확장하지 않는다
- 갱신계열 쿼리
Join 배제
- Table 이 서로를 직접 참조하는 Join 쿼리는 확장에 유연하지 못하다.
- Where In 절로 나누어 처리하는 것이
확장에는
유연하다