4. 정규화와 비정규화
- 정규화 되어진 데이터베이스에서는 팩트가 한나씩 존재하지만, 비정규화에서는 정보가 중복되어 있다.
- 퍼포먼스 문제를 해결하기 위해 스키마 정규화는 좋은 방법이다. 왜냐하면 정규화는 비정규화보다 고속이며 정규화 되어진 데이터는 중복해서 존재할 가능성도 적기 때문에 데이터가 적어져 메모리에 올리는데 부담이 적기 때문이다.
- 정규화의 결점은 테이블의 결합이 자주 발생하는 것이다. 일부의 인덱스를 사용 불가능해지기도 한다.
- 비정규화 스키마 정의는 모두 한 테이블에 포함되어 있어서 결합할 필요가 없다. 테이블 결합이 발생하지 않는 경우 테이블을 풀 스캔 해버린다. 랜덤한 I/O 를 회피하기 때문에 퍼포먼스가 좋아지는 경우가 있다. 또한 인덱스를 사용하기도 좋다.
- 비정규화의 문제점은 하나의 인덱스로 소트와 필터링을 동시에 할 수가 없다는 것이다.
- 비정규화는 일반적으로 하나의 테이블에서 선택되어진 열을 다른 테이블에 복제하거나 캐쉬에 저장할 때 사용한다.
- 비정규화 테이블은 UPDATE 항목이 늘어날 가능성이 크다.
- 정규화 테이블은 소트하는데 코스트가 필요하지만 다른 테이블에 컬럼을 캐쉬하고 인덱스를 걸면 소트 효율이 좋아진다.
- 메인테이블은 InnoDB, 캐쉬테이블은 MyISAM 으로 지정하여 인덱스 사이즈를 줄여 전문검색에 이용한다.
ALTER TABLE 고속화
- 메모리가 부족하여 테이블이나 인덱스 사이즈가 너무 큰 경우 ALTER TABLE 에 시간이 걸린다. 이 것을 개선시키기 위해 각 스토리지 엔진에서 개선시킨다.
- MODIFY COLUMN 은 테이블을 재구축하지만, ALTER COLUMN 은 .frm 파일만 갱신하므로 처리가 빠르다.
'IT라이프 > Database' 카테고리의 다른 글
Master data vs Transaction data (0) | 2022.10.05 |
---|---|
MySQL 퍼포먼스 향상 (3) 인덱스 (0) | 2015.06.20 |
MySQL 퍼포먼스 향상 (2) 스키마 최적화 (0) | 2015.06.20 |
MySQL 퍼포먼스 향상 (1) 아키텍처 (0) | 2015.06.20 |
mysql 날짜별 조회 (0) | 2013.09.30 |
댓글