친절한SQL튜닝

2장 인덱스 기본

v0o0v 2022. 3. 31. 13:31

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