본문 바로가기
IT라이프/Database

MySQL 퍼포먼스 향상 (4) 정규화

by zairan 2015. 6. 20.

4. 정규화와 비정규화


  - 정규화 되어진 데이터베이스에서는 팩트가 한나씩 존재하지만, 비정규화에서는 정보가 중복되어 있다.

  - 퍼포먼스 문제를 해결하기 위해 스키마 정규화는 좋은 방법이다. 왜냐하면 정규화는 비정규화보다 고속이며 정규화 되어진 데이터는 중복해서 존재할 가능성도 적기 때문에 데이터가 적어져 메모리에 올리는데 부담이 적기 때문이다.

  - 정규화의 결점은 테이블의 결합이 자주 발생하는 것이다. 일부의 인덱스를 사용 불가능해지기도 한다.

  - 비정규화 스키마 정의는 모두 한 테이블에 포함되어 있어서 결합할 필요가 없다. 테이블 결합이 발생하지 않는 경우 테이블을 풀 스캔 해버린다. 랜덤한 I/O 를 회피하기 때문에 퍼포먼스가 좋아지는 경우가 있다. 또한 인덱스를 사용하기도 좋다.

  - 비정규화의 문제점은 하나의 인덱스로 소트와 필터링을 동시에 할 수가 없다는 것이다.

  - 비정규화는 일반적으로 하나의 테이블에서 선택되어진 열을 다른 테이블에 복제하거나 캐쉬에 저장할 때 사용한다.

  - 비정규화 테이블은 UPDATE 항목이 늘어날 가능성이 크다.

  - 정규화 테이블은 소트하는데 코스트가 필요하지만 다른 테이블에 컬럼을 캐쉬하고 인덱스를 걸면 소트 효율이 좋아진다.

  - 메인테이블은 InnoDB, 캐쉬테이블은 MyISAM 으로 지정하여 인덱스 사이즈를 줄여 전문검색에 이용한다.


ALTER TABLE 고속화

  -  메모리가 부족하여 테이블이나 인덱스 사이즈가 너무 큰 경우 ALTER TABLE 에 시간이 걸린다. 이 것을 개선시키기 위해 각 스토리지 엔진에서 개선시킨다.

  - MODIFY COLUMN 은 테이블을 재구축하지만, ALTER COLUMN 은 .frm 파일만 갱신하므로 처리가 빠르다.


반응형

댓글