2.3 인덱스 확장기능 사용법

개발자 로그·2021년 6월 1일
0

친절한SQL튜닝

목록 보기
7/15
post-thumbnail

Index Range Scan

  • SQL 튜닝의 핵심 원리
  • 인덱스를 구성하는 선두 컬럼을 조건절에 사용
  • 항상 빠른 속도를 보장하지는 않는다 ( 데이터 양이 많은 경우 )
  • 인덱스 스캔하는 범위를 얼마나 줄일 수 있는지
  • 테이블로 엑세스 하는 횟수를 얼만큼 줄일 수 있는지
인덱스 : 이름 + 부서코드
SELECT *
  FROM 사원
 WHERE 이름 = '홍길동'

Index Full Sacn

  • 적당한 인덱스가 없는 경우 사용
  • 조회 조건의 인덱스가 있으나, 선두 컬럼이 아니지만 옵티마이저가 인덱스 활용 시 이익이 있다고 판단할 경우 사용

⭐ 최종 결과 값이 적을 때 Index Full Scan이 효율적이며,
최종 결과 값이 많을 때 Full Table Scan이 효율적이다.


Index Unique Scan

  • 수직적 스캔만 발생
  • Unique 인덱스 일 경우 사용
  • = 조건일 경우만 사용
  • Unique 인덱스라도 해도 between이나 like,부등호로 검색할 때는 Index Range Scan으로 처리됨
  • Unique 결합 인덱스에 대해 일부컬럼으로만 검색할 때도 Index Range Scan으로 처리됨
    → ex) 인덱스: 주문일자+고객ID+상품ID 인데 고객ID로만 검색하는 경우

Index Skip Scan

  • 조회 조건이 인덱스 선두 컬럼이 아니며, 인덱스 선두 컬럼의 Distinct가 매우 낮을 때 사용.
  • 인덱스 선두 컬럼이 Between , Lke , 부등호 일 때도 사용 가능
  • Index Skip Scan을 유도할때 : index_ss / 방지할 때 : no_index_ss

Index Fast Scan

  • 전체 Index를 Full Scan
  • Multi - Block I/O
  • 파라미터의 db_file_multiblock_read_count 개수( 통상적으로 128로 설정 )만큼 한번에 read
  • Index를 논리적 순서와 무관하게 물리적 순서대로 Read
  • 속도가 빠르다
  • 결과는 인덱스 키 컬럼의 순서와 쿠관
  • ) 블럭 읽는 갯수는 같으나,Disk에 왔다 갔다 하는 횟수가 적음

    메모리에서 읽은 것 - Logical read
    디스크에서 읽은 것 - Physical read

Index Full SacnIndex Fast Full Scan
인덱스 구조를 따라 스캔세그먼트 전체를 스캔
결과집합 순서 보장결과집합 순서 보장 안됨
Single Block I/OMulti Block I/O
병렬스캔 불가(파티션 시 가능)병렬스캔 가능
인덱스에 포함되자 않은 컬럼 조회 시에도 사용 가능인덱스에 포함된 컬럼으로만 조회할 때 사용 사용 가능
-- 인덱스에 포함된 컬럼으로만 조회할 때 사용 사용 가능
인덱스 : c1 + c2
SELECT c1, c2, c3
FROM t1
WHERE c2 = 'A';
=> c3까지 조회하므로 index fast full scan 불가!

Index Range Scan Descending

  • Index Range Scan과 기본적으로 동일하나, 인덱스를 뒤에서 부터 앞쪽으로 스캔하기 때문에 내림차순으로 정렬된 결과집합을 얻는다
  • 유도 : index_desc

In-List Iterator

  • In-List의 인수 만큼 반복 연산을 수행
profile
성장하는 개발자

0개의 댓글

관련 채용 정보