[DB Study] 인덱스 기본 개념

Dae-Hee·2021년 3월 6일
1

Oracle Tuning Essential

목록 보기
3/6
post-thumbnail

[DB Study] 인덱스 기본 개념

👉 인덱스의 특징

  • 인덱스란 ?

    추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상 시키기 위한 자료구조

    인덱스를 저장하는 곳의 가장 작은 단위는 블록
    원본을 찾아갈 수 있는 주소로 구성되어있다.

  • 인덱스의 장단점

  1. 장점
    1.1. 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
    1.2. 전반적인 시스템의 부하를 줄일 수 있다.

  2. 단점
    2.1. 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
    2.2. 인덱스를 관리하기 위해 추가 작업이 필요하다.
    2.3. 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.

👉 인덱스 스캔 방식

1. Index Unique Scan

  • 수직적 탐색으로만 데이터를 찾는 스캔 방식이다.(Fastest)
  • Unique 인덱스를 '=' 조건으로 탐색하는 경우 동작 한다.
  • Unique 인덱스가 존재하는 컬럼은 중복 값이 존재하지 않다.
  • Unique Index 또는 기본 키 컬림이 모두 조건에 참여 했을 때만 발동된다.

2. Index Range Scan

  • Index 루프에서 리프 블록까지 수직적 탐색을 하고 필요한 범위만큼 수평적 탐색을 하는 방식이다.(Normally)
  • Unique Index 에 해당하지 않는 조건에 발동된다.
  • PK 제약조건이 있는 컬럼이라도 비교연산자를 사용하면 대다수가 Index Range이 발동된다.

3. Index Full Scan

  • 수직적 탐색 없이 Index 리프 블록 처음부터 끝까지 수평적으로 탐색하는 방식이다.
  • 데이터 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택된다.
  • SQL에서 사용한 컬럼들이 하나의 INDEX에 존재할 경우 하나 이상은 NOT NULL 제약 조건을 충족해야 한다.

4. Index Skip Scan

  • 선두 컬럼이 조건절에 없어도 Index를 활용하는 새로운 스캔 방식(9i 이상)
  • 선두 컬럼 값의 가짓수가 성능을 좌우한다.

5. Index Fast Full Scan

  • Index Scan 중 유일하게 멀티블록 I/O 방식으로 스캔한다.
  • SELECT 절과 WHERE 절에 있는 컬럼은 모두 Index에 포함되어야 한다.

👉 인덱스 스캔 동작 원리 및 유의사항

  • WHERE 절에 좌측 비교 대상을 Function등으로 변형을 시킨다면 FBI 기반으로 Index를 생성해야 한다.

  • 묵시적 형변환

	WHERE X_ID = '123' 
	-- 위 조건문에서 X_ID의 DataType이 Number 라면 
        -- 아래와 같이 묵시적 형변환이 일어난다.
           
    	WHERE TO_CHAR(X_ID) = '123' 
        -- TO_CHAR(X_ID) 라는 Index가 설정되어 있지 않기 때문에
        -- Index가 작동 되지 않는다.
        -- 따라서 아래와 같이 조건문을 수정해야한다.
        
        WHERE X_ID = TO_NUMBER('123')
        
  • 인덱스 컬럼에 NULL 데이터가 있으면 인덱스를 이용해 데이터를 가져올 수 없고, NOT NULL 제약 조건이 걸려있지 않은 컬럼이라면 WHERE 구문에 IS NOT NULL 을 추가 해줘야 한다.

  • 부정형 비교와 여러 칼럼에 대한 OR 조건을 사용한다면 Index Scan 이 불가 할 수 있다.




↪ 참고 문헌 : 오라클 튜닝 에센셜

0개의 댓글