인덱스 Flashcards
인덱스
[리드] 검색성능 최적화 지원 독립 구조체
[정의] 데이터의 검색 속도 향상 위해 데이터 테이블과의 매핑 위한 레코드 식별자로 구성된 독립 구조체
[필요성] <개발/운용자> 개발생산성 향상, 유지보수 비용 절감 <사용자> 응답속도향상, 고객만족도 개선 <시스템> 가용성 향상, 신뢰성 증진
[유형]
1. 구성 단계별 유형
- 단단계 인덱스, 다단계 인덱스
2. 사용 용도에 따른 유형
- B-Tree Index : 루트 노트부터 키 값 비교하며 트리형태 하향식 검색, 범용적, OLTP 환경
- Bitmap Index : 비트 이용 컬럼값 저장하고 이를 통해 ROWID 자동 생성, DW/OLAP 환경
- Hash Index : 버켓, 해시함수, 해시 테이블
3. 물리적 데이터 순서 조정에 따른 유형
- Clustered Index : 데이터 블럭의 물리적 순서가 Index와 동일
- Non Clustered Index : 데이터 블럭의 물리적 변경 없음
4. 인덱스 키 생성 방식에 따른 유형
- 함수기반 Index : 인덱스 생성 컬럼에 함수나 산술식 적용
- (Non) Unique Index : PK값을 사용
* 이외에 물리적(Reverse, Partition Index), 논리적(Spurse Index) 존재</시스템></사용자>
b tree 인덱스 탐색 과정
[구성요소] Root, Branch, Leaf
[수직적 탐색 과정]
1. 검색하고자 하는 값과 Root, Branch 블록 값 비교
2. 찾고자 하는 값이 각 블록 값보다 작거나 같으면 왼쪽, 크면 오 른쪽 포인터로 이동
3. Leaf 블록 도달 시 까지 반복
[수평적 탐색 과정]
4. Leaf 블록에서 검색하고자 하는 값의 자료 탐색
5. 저장된 레코드 식별자(RowID) 확인, 오브젝트 번호/데이터 파일 번호/블록번호/블록 내 위치 정보를 통해 데이터 블록 레코드 검색
6. 동일한 값의 잔여 레코드 모두 확인 시 까지 스캔 수행
정적/동적 인덱싱
[정적 인덱싱] 데이터 삽입, 삭제에 따라 인덱스의 내용만 변경되고 구조는 불변하는 하드웨어 기반 인덱싱 기법
[동적 인덱싱] 데이터 파일과 인덱스를 블록으로 구성하여 레코드 삽입을 감안하여 빈 공간을 미리 준비해 두는 블록 기반 인덱싱 기법
[비교] 정적 vs 동적
- 레코드 삽입 : 오버플로우 영역 / 동적인 분열(Split)
- 레코드 유지 : 실린더,트랙 구성 / 병합 사용
- 장점 : 하드웨어 기반, 빠른 인덱싱 / Overflow chain 미사용, 효율적인 레코드 검색
- 단점 : 데이터 삽입,삭제시 성능저하 / 초기 인덱싱 성능 상대적 낮음
- 사례 : IBM의 ISAM 파일 / IBM의 VSAM 파일
인덱스 스캔 방식
- 탐색을 위한 스캔은 전체테이블 스캔과 인덱스 스캔으로 구분, 탐색 방식에 따라 다양한 인덱스 스캔방식 존재
[스캔방식] - Index Unique Scan : 수직적 탐색, Unique index ‘=‘ 조건으로 탐색시 사용
- Index Range Scan : 수직 탐색후 리프 블록 Range 탐색, 인덱스 구성 선행 컬럼이 조건절에 포함시 사용, 정렬결과 집합생성/order by생략/ Min,Max값 신속 추출 가능
- Index Range Scan Descending : Index Range Scan + 인덱스 역순 탐색, 옵티마이저사용 , Max탐색시 탐색시간 최소화/내림차순 정렬 결과집합 획득
- Index Skip Scan : 상위 블록 정보 활용, 탐색 가능성 기반 하위블록 탐색 , 선행컬럼을 조건절에 미포함시 사용
- Index Full Scan : 인덱스 리프 블록 처음부터 끝까지 수평탐색, 최적인덱스 부재시 사용 , 결과집합 소량일경우 table Full Scan 보다 유용 / Sort 연산 대체 가능
- index Fast Full Scan : 세그먼트 전체 탐색, 물리적 디스크 저장기반(Multi-Block Read), 넓은 범위 인덱스 스캔시 활용
- 인덱스 효과적 사용위해서 옵티마이저에 의해 조건절의 인덱스 컬럼이 활용되도록 가공 및 Random Access 최소화하는 초기설계 중요
인덱스 설계 절차
[선정(설계) 절차] (유분C클조테)
1. 테이블 액세스 유형 조사 : 프로그램 설계서, 프로그램 처리 조건 등을 고려하여 예상되는 접근 경로 수집
2. 분포도 분석 및 후보 컬럼 선정 : 수집된 접근 경로 컬럼들의 분포도 조사, 분포도 기준 10~15%
3. Critical Access Path 결정 : 후보 컬럼중 SQL 접근 유형에 따라 사용할 Index 결정
4. 클러스터링 검토 : 넓은 범위의 데이터를 보다 효과적으로 엑세스
5. 인덱스 컬럼 조합/순서결정 : 하나 이상의 컬럼 조합 필요시, 사용빈도 고려 선행 컬럼 지정
6. 테스트 및 적용 : 의도한 실행계획대로 동작 여부 확인
[차별화] 인덱스 성능 향상을 위한 인덱스 설계 시 주요 고려사항
- 선택도 기반 인덱스 설계 : 선택도(selectivity) 충분히 낮은 컬럼 선정(일반적으로 5~20% 수준에서 결정)
- 등치(=) 조건 최우선 결합 인덱스 설계 : 결합 인덱스 설계 시 Index Range Scan 사용 유도 (높은 빈도, ‘=’ 조건 컬럼 선행 배치)