본문 바로가기
CS(Computer Science)/데이터베이스

[ORACLE] 오라클 내부 작업 및 인덱스

by whdgus928 2023. 8. 31.

오라클의 내부 작업

명령어 ORACLE 내부 작업
ORDER BY SORT ORDER BY
UNION UNION-ALL
MINUS MINUS
INTERSECT INTERSECTION
DISTINCT, MINUS, INTERSECT, UNION SORT UNIQUE
MIN, MAX, COUNT SORT AGGREGATE
GROUP BY SORT GROUP BY
JOIN 된 SQL COUNT

ORACLE이 쿼리를 수행할 때 수반되는 내부 작업들이다. ORACLE의 내부 operation을 잘 이해해야만 원치 않는 과부하를 사전에 방지하고 원하는 결과를 더 빠른 시간에 얻을 수 있다.

 

인덱스

  - Index : 테이블로부터 데이터를 빠르게 조회하기 위해 사용하는 논리적이고 또한 물리적인 실체를 가진 객체
  - ORACLE은 내부적으로 B-tree(Balanced-tree) 방식의 인덱스 구조를 사용
  - Index를 통한 데이터의 조회는 테이블 내의 데이터 양이 많을 경우 full table scan에 의한 조회 보다 빠르다

  - ORACLE의 optimizer는 select, update, delete시 가장 효율적인 경로를 생성하기 위해 table에 명시된 index를 사용

  - 여러 테이블의 join에도 index를 사용
  - primary key에 의해 유일성(Uniqueness)을 보장 받을 수 있다
  - LONG이나 LONG RAW 타입의 컬럼을 제외하고는 어떤 컬럼을 이용해서든 인덱스를 만들 수 있다.
  - 일반적으로 대용량 테이블에 만들어진 인덱스는 대단히 유용

  - 만약 작은 테이블일지라도 빈번히 join에 사용된다면 index를 활용한 성능 향상이 가능
  - 사용에 따른 cost가 발생, 물리적인 object이므로 storage를 필요

  - 데이터의 delete, insert, update시에 인덱스에도 동일한 작업이 필요

  - 이러한 작업이 빈번히 일어나게 되면 인덱스의 효율이 나빠지기도 하므로 지속적인 관리가 필요
  - 위와 같이 인덱스의 개수에 따라 수회 이상의 storage와 system에 대한 overhead가 발생하여 오히려 성능을 저하시키기도 한다.
  - 일반적으로 테이블별로 4개 이상의 인덱스를 생성하는 것은 좋지 않음

 

항상 인덱스가 빠른건 아니고 인덱스를 사용해 손해 보는 경우도 있다

  1. 데이터가 적어 FULL TABLE SCAN이 유리한 경우

  2. 분포도가 나쁜 컬럼(같은 값이 많은 컬럼)

  3. SELECT보다 DML 부담이 더 큰 경우

 

인덱스 사용 기준

  1. 조건문에 자주 등장하는 컬럼

  2. 분포도가 좋은 컬럼

  3. 자주 JOIN되는 컬럼

 

반응형

댓글