INDEX

박성진·2023년 3월 2일
0

Database

목록 보기
6/7

인덱스

데이터의 빠른 검색을 위해 사용하는 색인 기술

  • b-tree 이용하여 검색 속도 향상
    • balanced-tree - 이진트리의 변형된 알고리즘

인덱스 장/단점

장점

  • 검색 속도가 빠름
  • 시스템 부하를 줄여 성능 향상
  • 자동 정렬

단점

  • 추가 공간 필요
  • 생성 시간 소요
  • Insert/Update/Delete 작업 시 성능 저하 (많을수록 더 느려진다)

인덱스 생성:

CREATE INDEX 인덱스명 ON 테이블명 (컬럼);

인덱스 계획 출력:

EXPLAIN PLAN FOR SELECT * FROM emp WHERE ename = ‘손흥민’;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

인덱스 튜닝

  • 인덱스를 사용해야할 칼럼은?
    • WHERE절 조건에서 자주 사용되는 컬럼
    • 조인 시 조건에 사용되는 컬럼
    • 두개 이상의 컬럼이 포함되는 조건인 경우 복합 인덱스로 지정
    • 복합 인덱스인 경우 조회 조건에 모든 컬럼이 동시에 사용되도록 지정 ← 그래야 효과 좋음

옵티마이저

사용자가 질의한 SQL문에 대한 최적의 실행 방법을 결정하는 역할

규칙기반 옵티마이저

  • 규칙(우선순위)를 통한 실행계획 생성
  • 인덱스 유무와 종류
  • 연산자의 종류
  • 우선순위가 높은 규칙으로 실행계획 생성

비용기반 옵티마이저 (Cost Base Optimizer)

  • 규칙기반 옵티마이저의 미측정 사례 단점을 극복하기 위해 사용
  • 가장 비용이 적은 실행계획 선택

실행계획

  • SQL에서 질의한 내용을 처리하기 위한 순서와 절차, 어떤 순서로 어떻게 처리할지 결정하는 방법
  • 구성요소: 조인 순서, 기법, 엑세스 기법, 최적화 정보, 연산

인덱스 스캔 방식

Index Unique Scan

  • unique 인덱스를 사용하여 하나의 데이터를 추출, unique 인덱스는 중복 불가
  • ‘=’ 연산자 사용

    SELECT * FROM dept WHERE deptno = 20

Index Range Scan

  • 인덱스를 이용하여 한건 이상의 데이터 추출

    SELECT * FROM emp WHERE deptno = 20

Index Full Scan

  • 처음 불록부터 마지막까지 순차적으로 탐색 (별로 좋지 않다)

    SELECT * FROM EMP WHERE deptno IS NOT NULL

Index Range Scan

  • 복합 인덱스로 구성된 경우 WHERE 조건절에 생략된 경우 (속도저하 위험)

    SELECT * FROM emp WHERE ename = ‘손흥민’ and mgr = 1000;

인덱스 스캔 유도

  • 실행 계획 생성 시 통계정보 이용, 하지만 잘못된 실행계획 만들 수 있음
  • 원하는 실행계획을 유도하기 위해 힌트 사용

    SELECT /+ 힌트명(테이블명 인덱스명) / …

힌트의 종류:

  • INDEX: 인덱스 스캔 유도
  • INDEX_RS: index range scan 유도
  • INDEX_SS: index skip scan 유도
  • INDEX_FFS: index fast full scan

인덱스 활용

  • 인덱스 칼럼 가공 금지
  • 복합인덱스와 개별 인덱스

추가적으로 작성하길…

profile
개발자가 되기까지

0개의 댓글