[ DB ]물리적 데이터 베이스 설계 ( 요약 )

물리적 데이터베이스 설계
보조기억장치
- 보조기억장치인 디스크의 구조는 디스크암(헤드)과 여러개의 판으로 이루어져 있다.
- 판은 트랙과 섹터로 구분된다.
- 디스크에 읽고 쓰는 시간은 탐구시간 + 회전 지연시간 + 전송시간 이다
- 따라서 탐구시간 = 0, 회전 지연시간 = 0 인 순차접근이 임의접근 보다 빠르다
버퍼 관리와 운영체제
- 디스크 입출력은 컴퓨터시스템에서 가장 속도가 느린 작업이다.
- 따라서 입출력 횟수를 줄이는 것이 성능향상에 중요하다.
디스크상에서 화일의 레코드 배치
- 레코드(=튜플)의 모임이 화일이라는 블록들의 모임에 저장
- 한 화일에 속하는 블록들이 반드시 연속할 필요는 없다.
- 블록의 길이는 보통 레코드보다 크다. 만약 넘칠경우 두개의 블록을 이어서 쓴다.(신장된 레코드)(ex:BLOB)
- 고정길이레코드 : 검색 시 위치를 예측하기 용이함
- 가변길이레코드 : 고정길이보다 특정 레코드의 접근이 어려움
- 화일 내 클러스터링 : 화일 내 같이 검색될 가능성이 높은 레코드들을 물리적으로 모아둠
- 화일 간 클러스터링 : 검색될 가능성이 높은 레코드가 서로 다른 화일에 포함되어 있을 경우, 그 화일들을 물리적으로 모아둠.
화일 조직
- 히프화일 (비순서화일) : 맨 뒤에 기록
- 순차화일 (순서 화일) : 필드(탐색 키)를 기준으로 정렬된 화일
- 필드에 유관한 데이터의 경우 이진탐색으로 검색이 빠름
- 삽입 시 들어가야 할 자리에 공간을 만들어 내서 삽입
단일 단계 인덱스
- 기본 인덱스 : 탐색 키가 화일의 기본 키인 인덱스 (이자 희소인덱스)
- 클러스터링 인덱스 vs 보조 인덱스
(정렬)
- 클러스터링 인덱스 : 키값에 따라 ‘정렬된’ 데이터 화일에 대한 인덱스 (책의 색인)
- 보조 인덱스 : 기본인덱스의 키를 제외한 다른 키를 기준으로, ‘정렬되지 않은’ 데이터 화일의 인덱스.
비 클러스터링 인덱스. (밀집인덱스 형태)
- 희소 인덱스 vs 밀집 인덱스
(밀도)
- 희소 인덱스 : 일부 키 값에 대해, 한 데이터 블록마다 엔트리를 유지하는 인덱스 (기본인덱스 포함)
- 밀집 인덱스 : 키 값에 대해, 각 레코드(튜플)마다 엔트리를 유지하는 인덱스
다단계 인덱스
- 다단계 인덱스 : 인덱스에 대한 인덱스
- 2단계 이상부터는 희소 인덱스로 구성됨. (당연하다 밀집인덱스로 하면 의미가 없음)
- B+트리 : balanced (균형 이진탐색 트리)
- 복수의 애트리뷰트 인덱스 : 3개 이하로 정의
인덱스를 결정하는데 도움되는 지침
- 기본 키는 클러스터링 인덱스를 정의할 훌륭한 후보이다.
- 외래키도 인덱스를 정의할 훌륭한 후보이다.
- 한 애트리뷰트에 들어있는 상이한 값들의 개수가 거의 전체레코드 수와 비슷하고, 그 애트리뷰트가 동등조건에 사용된다면 비 클러스터링 인덱스를 생성하는 것이 좋다.
- 튜플이 많은 릴레이션에서 대부분의 질의가 검색하는 튜플이 3% 내외이면 인덱스를 생성하는 것이 좋다.
- 자주 갱신되는 ‘애트리뷰트’에는 인덱스를 정의하지 않는 것이 좋다.
- 자주 갱신되는 ‘릴레이션’에는 인덱스를 많이 만드는 것을 피한다.
- 인덱스는 화일의 레코드 들을 충분히 분할 할 수 있어야 도움이 된다.
- 가능하면 정수형 애트리뷰트 인덱스를 만드는 것이 좋다.
- VARCHAR 데이터 타입을 갖는 애트리뷰트에 인덱스를 만드는 것은 피해야 한다.
- 작은 화일에는 인덱스를 만들 필요가 없다.
인덱스를 사용하지 않을 때
- 시스템 카탈로그가 오래 전의 데이터베이스 상태를 나타낼 때
- 릴레이션의 크기가 작아서 인덱스가 도움이 되지 않을 때
- 인덱스가 정의된 애트리뷰트에 산술연산자가 사용될 때
- WHERE SALARY * 12 > 4000000 …(X)
- WHERE SALARY > 4000000 / 12 …(O)
- DBMS가 제공하는 내장함수가 사용될 때
- WHERE SUBSTR(EMPNAME, 1, 1) = ‘김’ …(X)
- WHERE EMPNAME LIKE ‘김%’ …(O)
- 널 값에 대해서.
