인덱스
2021. 12. 7. 21:30
인덱스
[TOC]
단일단계 인덱스
- 인덱스는 데이터 파일과는 별도의 파일에 저장됨
- 인덱스의 크기는 데이터 파일의 크기에 비해 훨씬 작음
- 하나의 파일에 여러 개의 인덱스들을 정의할 수 있음
- Empno로 검색을 많이하면 EmpnoIndex를 만듦
기본 인덱스
- 탐색 키가 데이터 파일의 기본 키인 인덱스를 기본 인덱스라 부른다
- 위의 경우는 EMPNO가 될것
- 기본 인덱스는 기본 키의 값에 따라 정렬된 데이터 파일에 정의됨
- 기본 인덱스는 흔히 희소 인덱스로 유지할 수 있음
- 희소 인덱스 (sparse index) : 모든 키로 인덱스를 만드는 것이 아닌 대표값으로 띄엄띄엄 만듦
- 각 릴레이션마다 최대한 한 개의 기본 인덱스를 가질 수 있음
클러스터링 인덱스(clustering index)
- 탐색 키 값에 따라 정렬된 데이터 파일에 대해 정의됨
- 각각의 상이한 키 값마다 하나의 인덱스 엔트리가 인덱스에 포함됨
- 범위 질의에 유용
- 범위의 시작 값에 해당하는 인덱스 엔트리를 먼저 찾고, 범위에 속하는 인덱스 엔트리들을 따라가면서 레코드들을 검색할 때 디스크에서 읽어오는 블록 수가 최소화됨
- 어떤 인덱스 엔트리에서 참조되는 데이터 블록을 읽어오면 그 데이터 블록에 들어 있는 대부분의 레코드들은 범위를 만족함
)
보조 인덱스(secondary index)
- 한 파일은 기껏해야 한 가지 필드들의 조합에 대해서만 정렬될 수 있음
- 보조 인덱스는 탐색 키 값에 따라 정렬되지 않은 데이터 화일에 의해 정의됨
- 보조 인덱스는 일반적으로 밀집 인덱스이므로 같은 수의 레코드들을 접근할 때 보조 인덱스를 통하면 기본 인덱스를 통하는 경우보다 디스크 접근 횟수가 증가할 수 있음
희소 인덱스 vs 밀집 인덱스
- 희소 인덱스는 각 데이터 블록마다 한 개의 엔트리를 갖고, 밀집 인덱스는 각 레코드마다 한 개의 엔트리를 가짐
- 레코드의 길이가 블록 크기보다 훨씬 작은 일반적인 경우에는 희소 인덱스의 엔트리 수가 밀집 인덱스의 엔트리 수 보다 훨씬 적음
- 희소 인덱스는 일반적으로 밀집 인덱스에 비해 인덱스 단계 수가 1정도 적으므로 인덱스 탐색시 디스크 접근 수가 1만큼 적을 수 있음
- 희소 인덱스는 밀집인덱스에 비해 모든 갱신과 대부분의 질의에 대해 더 효율적
- 그러나 질의에서 인덱스가 정의된 애트리뷰트만 검색 (ex) count))하는 경우에는 데이터 파일을 접근할 필요 없이 인덱스만 접근해서 질의를 수행할 수 있으므로 밀집 인덱스가 희소 인덱스보다 유리
- 한 파일은 한개의 희소인덱스와 다수의 밀집 인덱스를 가질 수 있다.
- 정리 : 희소 인덱스는 단순 검색에는 좋지만 전체 row가 필요한 경우가 필요한 경우에는 밀집 인덱스가 효율적일 수 있음
클러스터링 인덱스 vs 보조 인덱스
- 클러스터링 인덱스는 희소 인덱스일 경우가 많으며 범위 질의에 좋음
- 보조 인덱스는 밀집 인덱스이므로 일부 질의에 대해서는 파일을 접근할 필요 없이 처리 가능
다단계 인덱스
)
인덱스 정의문
- SQL의 CREATE TABLE 문에서 PRIMARY KEY절로 명시한 애트리뷰트에 대해서는 DBMS가 자동으로 기본 인덱스 생성
- UNIQUE로 명시한 애트리뷰트에 대해서는 DBMS가 자동적으로 보조 인덱스를 생성
- 다른 애트리뷰트에 추가로 인덱스를 정의하기 위해서는 DBMS마다 다소 구문이 다른 CREATE INDEX문 사용해야 함
인덱스 장단점
- 인덱스는 검색 속도를 향상시키지만 인덱스를 저장학 ㅣ위한 공간이 추가로 필요하고 C, U , D 연산 속도는 저하시킴
- 소수의 레코드들을 수정하거나 삭제하는 연산의 속도는 향상됨
- 릴레이션이 매우 크고, 질의에서 릴레이션의 튜플들 중에 일부를 검색하고, WHERE절이 잘 표현되었을 때 특히 성능에 도움이 됨
인덱스 선정 지침과 데이터베이스 튜닝
튜닝 팁
- 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 |