인덱스

2021. 12. 7. 21:30

인덱스

[TOC]

단일단계 인덱스

단일단계인덱스

  • 인덱스는 데이터 파일과는 별도의 파일에 저장됨
  • 인덱스의 크기는 데이터 파일의 크기에 비해 훨씬 작음
  • 하나의 파일에 여러 개의 인덱스들을 정의할 수 있음

단일단계인덱스2

  • Empno로 검색을 많이하면 EmpnoIndex를 만듦

기본 인덱스

  • 탐색 키가 데이터 파일의 기본 키인 인덱스를 기본 인덱스라 부른다
    • 위의 경우는 EMPNO가 될것
  • 기본 인덱스는 기본 키의 값에 따라 정렬된 데이터 파일에 정의됨
  • 기본 인덱스는 흔히 희소 인덱스로 유지할 수 있음
    • 희소 인덱스 (sparse index) : 모든 키로 인덱스를 만드는 것이 아닌 대표값으로 띄엄띄엄 만듦
  • 각 릴레이션마다 최대한 한 개의 기본 인덱스를 가질 수 있음

기본인덱스

클러스터링 인덱스(clustering index)

  • 탐색 키 값에 따라 정렬된 데이터 파일에 대해 정의됨
  • 각각의 상이한 키 값마다 하나의 인덱스 엔트리가 인덱스에 포함됨
  • 범위 질의에 유용
  • 범위의 시작 값에 해당하는 인덱스 엔트리를 먼저 찾고, 범위에 속하는 인덱스 엔트리들을 따라가면서 레코드들을 검색할 때 디스크에서 읽어오는 블록 수가 최소화됨
  • 어떤 인덱스 엔트리에서 참조되는 데이터 블록을 읽어오면 그 데이터 블록에 들어 있는 대부분의 레코드들은 범위를 만족함

클러스터링 인덱스

)

비클러스터링

보조 인덱스(secondary index)

  • 한 파일은 기껏해야 한 가지 필드들의 조합에 대해서만 정렬될 수 있음
  • 보조 인덱스는 탐색 키 값에 따라 정렬되지 않은 데이터 화일에 의해 정의됨
  • 보조 인덱스는 일반적으로 밀집 인덱스이므로 같은 수의 레코드들을 접근할 때 보조 인덱스를 통하면 기본 인덱스를 통하는 경우보다 디스크 접근 횟수가 증가할 수 있음

희소 인덱스 vs 밀집 인덱스

  • 희소 인덱스는 각 데이터 블록마다 한 개의 엔트리를 갖고, 밀집 인덱스는 각 레코드마다 한 개의 엔트리를 가짐
  • 레코드의 길이가 블록 크기보다 훨씬 작은 일반적인 경우에는 희소 인덱스의 엔트리 수가 밀집 인덱스의 엔트리 수 보다 훨씬 적음
  • 희소 인덱스는 일반적으로 밀집 인덱스에 비해 인덱스 단계 수가 1정도 적으므로 인덱스 탐색시 디스크 접근 수가 1만큼 적을 수 있음
  • 희소 인덱스는 밀집인덱스에 비해 모든 갱신과 대부분의 질의에 대해 더 효율적
  • 그러나 질의에서 인덱스가 정의된 애트리뷰트만 검색 (ex) count))하는 경우에는 데이터 파일을 접근할 필요 없이 인덱스만 접근해서 질의를 수행할 수 있으므로 밀집 인덱스가 희소 인덱스보다 유리
  • 한 파일은 한개의 희소인덱스와 다수의 밀집 인덱스를 가질 수 있다.
  • 정리 : 희소 인덱스는 단순 검색에는 좋지만 전체 row가 필요한 경우가 필요한 경우에는 밀집 인덱스가 효율적일 수 있음

클러스터링 인덱스 vs 보조 인덱스

  • 클러스터링 인덱스는 희소 인덱스일 경우가 많으며 범위 질의에 좋음
  • 보조 인덱스는 밀집 인덱스이므로 일부 질의에 대해서는 파일을 접근할 필요 없이 처리 가능

다단계 인덱스

다단계 인덱스

)

다단계인덱스2

인덱스 정의문

  • SQL의 CREATE TABLE 문에서 PRIMARY KEY절로 명시한 애트리뷰트에 대해서는 DBMS가 자동으로 기본 인덱스 생성
  • UNIQUE로 명시한 애트리뷰트에 대해서는 DBMS가 자동적으로 보조 인덱스를 생성
  • 다른 애트리뷰트에 추가로 인덱스를 정의하기 위해서는 DBMS마다 다소 구문이 다른 CREATE INDEX문 사용해야 함

인덱스 장단점

  • 인덱스는 검색 속도를 향상시키지만 인덱스를 저장학 ㅣ위한 공간이 추가로 필요하고 C, U , D 연산 속도는 저하시킴
  • 소수의 레코드들을 수정하거나 삭제하는 연산의 속도는 향상됨
  • 릴레이션이 매우 크고, 질의에서 릴레이션의 튜플들 중에 일부를 검색하고, WHERE절이 잘 표현되었을 때 특히 성능에 도움이 됨

인덱스 선정 지침과 데이터베이스 튜닝

지침1지침2지침3지침4

튜닝 팁

  • DISTINCT절의 사용을 최소화하라
  • GROUP BY 절과 HAVING 절의 사용을 최소화하라
  • 임시 릴레이션의 사용을 피하라
  • SELECT * 대신에 SELECT절에 애트리뷰트 이름들을 구체적으로 명시하라

'CS > 데이터베이스' 카테고리의 다른 글

Transaction  (0) 2021.12.13
물리적 데이터 베이스 설계  (0) 2021.12.01
데이터베이스 설계  (0) 2021.11.23
SQL 기초  (0) 2021.11.18
관계대수  (0) 2021.11.17

+ Recent posts