📌 키, 반정규화, 인덱스를 다룹니다.
검색, 정렬시 Tuple을 구분할 수 있는 기준이 되는 Attribute
Tuple을 유일하게 식별하기 위해 사용하는 속성들의 부분 집합. (기본키로 사용할 수 있는 속성들)
2가지 조건 만족
후보키 중 선택한 Main Key
특징
후보키 중 기본키를 제외한 나머지 키 = 보조키
유일성은 만족하지만, 최소성은 만족하지 못하는 키
다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합
반정규화란 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위이다.
두 개의 테이블이 조인되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움이 될 경우 수행한다. 두 개의 테이블에서 발생하는 프로세스가 동일하게 자주 처리되는 경우
, 두 개의 테이블을 이용하여 항상 조회를 수행하는 경우
테이블 통합을 고려한다.
테이블을 수직 또는 수평으로 분할하는 것이다.
갱신위주의 속성 분할
: 데이터 갱신 시 레코드 잠금으로 인해 다른 작업을 수행 할 수 없으므로 갱신이 자주 일어나는 속성들을 수직 분할하여 사용한다.자주 조회되는 속성 분할
: 테이블에서 자주 조회되는 속성이 극히 일부일 경우 자주 사용되는 속성들을 수직분할하여 사용한다.크기가 큰 속성 분할
: 이미지, 2GB 이상 저장될 수 있는 텍스트 형식으로 된 속성들을 수직분할하여 사용한다.보안을 적용해야 하는 속성 분할
: 테이블 내의 특정 속성에 대해 보안을 적용할 수 없으므로 보안을 적용해야 하는 속성들을 수직분할 하여 사용한다.여러 테이블에서 데이터를 추출해서 사용해야 하거나 다른 서버에 저장된 테이블을 이용해야 하는 경우 중복 테이블을 추가하여 작업의 효율성을 향상시킬 수 있다.
집계 테이블의 추가
: 집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거를 설정하여 사용하는 것으로, 트리거의 오버헤드에 유의한다.진행 테이블의 추가
: 이력 관리 등의 목적으로 추가하는 테이블로, 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본키를 적절히 설정한다.특정 부분만을 포함하는 테이블의 추가
: 데이터가 많은 테이블의 특정 부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성한다.조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가하는 것이다.
중복 속성을 추가하면 데이터의 무결성 확보가 어렵고, 디스크 공간이 추가로 필요하다.
중복 속성을 추가하는 경우
중복 속성 추가 시 고려 사항
RDBMS에서 검색속도를 높이기 위해 사용하는 하나의 기술이다.
index는 색인이다. 해당 테이블의 컬럼을 색인화(따로 파일로 저장)하여 검색 시 해당 테이블의 레코드를 full scan 하는게 아니라 색인화 되어있는 index 파일을 검색하여 검색속도를 빠르게 한다.
이런 index는 tree 구조로 색인화한다. RDBMS에서 사용하는 index는 balance search tree를 사용한다. 실제로는 RDBMS에서 사용되는 B-Tree는 B-Tree에서 파생된 B+ Tree를 사용한다고 한다.
index를 해당 컬럼에 주게 되면 초기 테이블 생성시 만들어진 MYD, MYI, FRM 3개의 파일 중에서 MYI에 해당 컬럼을 색인화하여 저장한다. 물론 index를 사용 안할시에는 MYI 파일은 비어있다. 그래서 index를 해당 컬럼에 만들게 되면 해당 컬럼을 따로 인덱싱하여 MYI 파일에 입력한다.
사용자가 SELECT 쿼리로 index가 사용하는 쿼리를 사용 시 해당 테이블을 검색하는 것이 아니라 tree로 정리해둔 MYI 파일의 내용을 검색한다. 만약 index를 사용하지 않은 SELECT 쿼리라면 해당 테이블을 full scan하여 모두 검색한다.
https://github.com/gyoogle/tech-interview-for-developer
https://github.com/Seogeurim/CS-study
https://lalwr.blogspot.com/2016/02/db-index.html
우아한형제들 개발블로그에 mysql이랑 postgreSql에 대해 비교한 글이 있습니다. 전 읽어봐도 무슨말인지 잘 모르겠지만 관심있으시면 읽어보세요~~
https://techblog.woowahan.com/6550/