2장 인덱스 기본
인덱스 구조 및 탐색
- 데이터를 찾는 두 가지 방법
- 테이블 전체 스캔
- 인덱스 이용
- 온라인 트랜잭션 처리에서는 소량의 데이터를 찾기 때문에 인덱스를 사용하고 인덱스 튜닝이 중요하다
- SQL 튜닝은 랜덤 I/O와의 전쟁
- 인덱스는 대부분 B-Tree
- 수직적 탐색 : 인덱스 스캔 지점을 찾는 과정
- 수평적 탐색 : 데이터를 찾는 과정
- 인덱스는 필터링이 아니다. 결합인덱스를 사용할 때 주의 사항.
인덱스 기본 사용법
- 색인이 정렬되어 있더라도(인덱스라도) 가공한 값이나 중간값으로는 스캔 시작점을 찾을 수 없다.
- Index Range Scan
- 인덱스 컬럼이 가공되면 전체를 스캔할 수 밖에 없다.
- Index Full Scan
- 인덱스를 range scan 하기 위한 가장 첫번째 조건은 인덱스 선두 컬럼이 조건절에 있어야 한다.
- 인덱스는 기본적으로 정렬되어 있기 때문에 소트 연산의 생략이 가능하다
- ORDER BY 나 SELECT-LIST 컬럼을 가공하면 인덱스 레인지 스캔이 불가능하다.
- 인덱스의 타입을 맞추지 않으면 인덱스 사용이 불가능하다.
인덱스 확장기능 사용법
- Index Range Scan
- 루트에서 리프 블록까지 수직적 탐색 후에 필요한 범위 수평적 스캔
- Index Full Scan
- 수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적 탐색
- Index Unique Scan
- 인덱스로 '=' 조건 검색 시.
- Index Skip Scan
- Index Full Scan을 사용해야 할 경우에 필요없는 부분은 skip하는 방식
- 인덱스 선두 컬럼의 Distinct Value 개수가 적고 후행 컬럼의 Distinct Value 개수가 많을 때 유용
- Index Fast Full Scan
- Index Full Scan을 순서대로 하지 않고 인덱스 세그먼트 전체를 멀티블럭 I/O 하는 방식.
- 속도도 빠르고 병렬로 읽어 올 수 있지만 결과집합이 키 순서대로 정렬되지 않는다.
- Index Range Scan Descending
- Index Range Scan을 필요에 따라 거꾸로 읽는 방식
'친절한SQL튜닝' 카테고리의 다른 글
5장 소트 튜닝 (0) | 2022.03.31 |
---|---|
4.4장 서브쿼리 조인 (0) | 2022.03.31 |
3장 인덱스 튜닝 (2) (0) | 2022.03.31 |
3장 인덱스 튜닝 (1) (0) | 2022.03.31 |
1장 SQL 처리 과정과 I/O (0) | 2022.03.31 |