물리적 데이터베이스 설계

보조기억장치

  • 보조기억장치인 디스크의 구조는 디스크암(헤드)과 여러개의 판으로 이루어져 있다.
  • 판은 트랙과 섹터로 구분된다.
  • 디스크에 읽고 쓰는 시간은 탐구시간 + 회전 지연시간 + 전송시간 이다
  • 따라서 탐구시간 = 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)
  • 널 값에 대해서.
    • WHERE MANAGER IS NULL

0개의 댓글

Powered by GraphCDN, the GraphQL CDN