SQLD자격증독학

[SQLD자격증독학] 인덱스

i-moo 2017. 3. 11. 17:41
반응형

인덱스 특징과 종류

: 검색 조건을 만족하는 데이터를 인덱스를 통해 효과적

: DML(Insert, Update, Delete) 작업은 테이블과 인덱스를 함께 변경 해야 하기 때문에 느려질 수 있다.

: 테이블에 인덱스를 생성하지 않아도 되고 여러 개를 생성해도 된다.


트리 기반 인덱스

- B-트리 인덱스

리프 블록

: 인덱스를 구성하는 칼럼의 데이터와 해당 데이터를 가지고 있는 행의 위치를 가리키는 레코드 식별자로 구성

: 양방향 링크 -> 오름차순과 내림차순 검색을 쉽게 할 수 있다


1) 브랜치 블록의 가장 왼쪽 값이 찾고자 하는 값보다 작거나 같으면 왼쪽 포인터로 이동

2) 찾고자 하는 값이 브랜치 블록의 값 사이에 존재하면 가운데 포인터로 이동

3) 오른쪽에 있는 값보다 크면 오른쪽 포인터로 이동


-> 이 과정을 리프 블록 찾을 때까지 반복


Oracle 트리 기반 인덱스 : B-트리 인덱스, 비트맵 인덱스, 리버스 키 인덱스, 함수기반 인덱스


SQL Server 인덱스

: 클러스터형 인덱스, 비클러형 인덱스


SQL Server 클러스터형 인덱스

- 인덱스의 리프 페이지 == 데이터 페이지 (사전)

- 리프 페이지의 모든 로우에는 인덱스 키 칼럼 순으로 물리적으로 정렬되어 저장된다.


전체 테이블 스캔

: 테이블에 존재하는 모든 데이터를 읽어 가면서 조건에 맞으면 결과로서 추출하고 조건에 맞지 않으면 버리는 방식으로 검색

- 모든 데이터를 읽어야 하기 때문에 모든 결과를 찾을 때까지 시간이 오래 걸릴 수 있다.

- 읽은 블록들은 재사용성이 떨어진다

- 사용하는 경우

1) SQL문에 조건이 존재하지 않는 경우

2) SQL문의 주어진 조건에 사용 가능한 인덱스가 존재하지 않는 경우

3) 옵티마이저의 취사 선택 (조건을 만족하는 데이터가 많은 경우)

4) 병렬처리 방식으로 처리하는 경우 OR 전체 테이블 스캔 방식의 힌트를 사용한 경우


인덱스 스캔

: 인덱스를 구성하는 칼럼의 값을 기반으로 데이터를 추출하는 액세스 기법

: 사용하는 경우

1) 유일 인덱스를 사용하여 단 하나의 데이터를 추출하는 방식

- 유일 인덱스 : 중복을 허락하지 않는 인덱스

2) 인덱스를 이용하여 한 건 이상의 데이터를 추출하는 방식

3) 인덱스 역순 범위 스캔

- 최대 값을 쉽게 찾을 수 있다


- 전체 테이블 스캔과 인덱스 스캔 방식 비교

-> 전체 테이블 스캔 : 한번의 I/O 요청에 여러 블록을 한꺼번에 읽는다

    : 대부분의 데이터를 찾을 때

-> 인덱스 스캔 : 검색하는 데이터의 정확한 위치를 알고서 데이터를 읽는다. (불필요하게 다른 블록을 더 읽을 필요 X)

   : 한번의 I/O 요청에 한 블록씩 데이터를 읽는다

   : 극히 일부 데이터를 찾을 때


반응형