반응형
테이블 설계 시 유의 사항
1. 반드시 Primary Key를 정의하고 최대한 작은 데이터 타입을 선정한다.
- 로그 성 테이블에도 기본적으로 PK 생성을 원칙으로 함
- InnoDB에서 PK는 인덱스와 밀접한 관계를 가지므로 최대한 작은 데이터 타입을 가지도록 유지
2. 테이블 Primary Key는 auto_increment를 사용한다.
- InnoDB에서는 기본 키 순서로 데이터가 저장되므로, Random PK 저장 시 불필요한 DISK I/O가 발생 가능
- InnoDB의 PK는 절대 갱신되지 않도록 유지
(갱신 시 갱신된 행 이후 데이터를 하나씩 새 위치로 옮겨야 함)
3. 데이터 타입은 최대한 작게 설계한다.
- 시간정보는 MySQL데이터 타입 date/datetime/timestamp 활용
- IP는 INET_ATON(‘IP’), INET_NTOA(int) 함수를 활용
- 정수 타입으로 저장 가능한 문자열 패턴은 최대한 정수 타입으로 저장
4. 테이블 내 모든 필드에 NOT NULL 속성을 추가한다.
- NULL을 유지를 위한 추가 비용 발생
(NULL 허용 칼럼을 인덱싱 할 때 항목마다 한 바이트 씩 더 소요)
5. Partitioning을 적절하게 고려하여 데이터를 물리적으로 구분한다.
- 데이터 및 인덱스 파일이 커질수록 성능이 저하되므로Partitioning 유도
- PK 존재 시 PK 내부에 반드시 Partitioning 조건이 포함되어야 함
참고 : http://gywn.net/2012/05/matters-require-attention-with_mysql/
반응형