본문 바로가기

Database

인덱스와 조인 #2

Index Range Scan

Index Range Scan Descending

 

hint : Index_desc

 

  • B*Tree인덱스의 가장 일반적이고 정상적인 형태
  • 필요한 범위만 스캔
  • 인덱스를 구성하는 선두 컬럼을 조건절에 사용해야한다.
  • 성능은 인덱스 스캔범위, 테이블 엑세스 횟수를 얼마나 줄일수있느냐로 결정(인덱스탄다고끝이아님)
  • 인덱스 사용이 불가능 하거나 범위 스캔(Range Scan)이 불가능 한 경우 ?
    1. 인덱스 컬럼의 가공 (좌변 가공)
    2. Null 검색
      1. Null 검색의 경우, not null인 행이 있어 ” null + 값” 인경우 인덱스 range scan 가능
    3. 묵시적 형변환
      1. 컬럼과 상수의 Data Type이 상이한 경우변환 불가능하면 에러 발생문자 = 숫자 (문자 > 숫자)날짜 = 숫자 (에러)
      2. 문자 = 날짜 (문자 > 날짜)
      3. 단, Like 연산자의 경우 반대로 숫자 → 문자로 변경
      4. 문자 → 순자로 변환 후 비교
    4. 부정검색 (~아니다)
    *WHERE 절의 순서는 인덱스와는 무관함
Null 검색에 따른 Index Range Scan 가능 여부

 

인덱스 구성 CASE1
WHERE
고객번호 IS NULL
CASE2
WHERE
고객번호 IS NULL
AND 고객명 = '홍길동'
설명
고객번호 X X Null은 인덱스를 만들지 않는다.
고객번호 +
고객명 (Nullable)
X O CASE1:
두 컬럼 모두 Null일 경우 인덱스에서 검색 불가
CASE2:
Null + 홍길동 데이터는 인덱스에 데이터 생성
고객번호 +
고객명 (고객명 Not Null)
O O CASE1:
두 컬럼 모두 Null인 케이스가 없기 때문에, 인덱스 생성
CASE2:
Null + 홍길동 데이터는 인덱스에 데이터 생성



 

Index Full Scan

 

hint : Index_fs(X), Index

 

  • 조회 조건의 인덱스가 있으나, 선두 컬럼이 아니지만,
  • 옵티마이저가 인덱스 활용에서 이익이 있다고 판단할 경우.
  • 적당한 인덱스가 없을 경우.
  • 최종 결과 값이 적을 때 Full Table Scan 보다 Index Full Scan이 효율적, 최종 결과값이 많다면 Full Table Scan이 효율적

 

 

 

Index Unique Scan

 

 

  • 수직적 스캔만 발생
  • Unique 인덱스 인 경우
  • equal (=) 조건인 경우

 

 

 

Index Skip Scan

hint : index_ss

 

 

  • 조회 조건이 인덱스 선두 컬럼이 아니고,
  • 인덱스 선두 컬럼의 distinct 가 매우 낮은 경우
  • 인덱스 선두 컬럼이 Between, Like, 부등호 일 때도 사용할 수 있음.

 

 

 

 

Index Fast Full Scan

hint : Index_ffs

 

  • 전체 Index Full Scan
  • Multi-Block I/O
  • 파라미터의 db_file_multiblock_read_count 개수만큼 한번에 Read
  • Index 논리적 순서와 무관하게 물리적 순서대로 Read
  • 빠른 속도
  • 결과는 인덱스 키 컬럼 순서와 무관

 

 

구독해주세요 ~ 

'Database' 카테고리의 다른 글

인덱스 스캔 효율  (0) 2025.04.04
오라클 DBMS 구조  (0) 2025.04.04
인덱스와 조인 #1  (0) 2025.04.04
HOT update  (0) 2025.04.04
Oracle vs PostgreSQL  (0) 2025.04.04