반응형

Oracle INDEX 오라클 인덱스

  • Oracle에서 INDEX는 테이블의 데이터를 빠르게 검색하기 위해 사용하는 데이터 구조입니다.
  • 인덱스(INDEX)는 테이블의 한 열이나 여러 열에 대해 만들어지며, 검색 성능을 향상시키는 데 도움을 줍니다.
  • 일반적으로 자주 사용되는 열이나 WHERE 절에 많이 사용되는 열에 인덱스를 생성하여 쿼리 성능을 최적화할 수 있습니다.


1. 인덱스 종류

  • Oracle에서는 다양한 종류의 인덱스를 제공합니다.
    • (1) B-tree Index : 가장 일반적인 인덱스 형태로, 대부분의 검색 및 정렬 작업에 적합합니다.
    • (2) Bitmap Index : 값의 중복이 많은 열(예: 성별, 상태)에서 사용됩니다.
    • (3) Unique Index : 유일한 값을 가지도록 제한하는 인덱스로, 기본 키와 같이 유일한 제약 조건을 보장할 때 사용됩니다.
    • (4) Composite Index : 두 개 이상의 열로 구성된 인덱스로, 복합 검색을 최적화하는 데 사용됩니다.
    • (5) Function-based Index : 함수나 표현식을 사용하여 계산된 값을 기준으로 인덱스를 생성합니다.


2. 인덱스의 장점과 단점

  • 장점: 데이터 검색 속도를 향상시키며, 데이터베이스의 성능을 높입니다.

  • 단점: 데이터를 삽입하거나 수정할 때 인덱스도 함께 업데이트되어야 하므로, 인덱스가 많으면 DML(Data Manipulation Language) 성능이 저하될 수 있습니다. 인덱스는 또한 디스크 공간을 추가로 차지합니다.



3. 인덱스 생성 예제

3.0.1 예제 테이블 생성
  • 먼저 예제 테이블을 생성합니다.

  • sql

CREATE TABLE employees (
    employee_id NUMBER PRIMARY KEY,
    name VARCHAR2(50),
    department_id NUMBER,
    salary NUMBER
);

3.1 B-tree 인덱스 생성

  • 가장 기본적인 인덱스 형태인 B-tree 인덱스를 department_id 열에 생성해 보겠습니다.

  • sql

      CREATE INDEX idx_department ON employees(department_id);
    
  • 이렇게 생성된 인덱스는 employees 테이블의 department_id 열에 대해 WHERE 절을 이용한 검색 속도를 향상시킵니다.

    • 예: SELECT * FROM employees WHERE department_id = 10;

3.2 Unique 인덱스 생성

  • 특정 열의 값이 유일해야 할 때 UNIQUE 인덱스를 생성할 수 있습니다.

  • sql

      CREATE UNIQUE INDEX idx_employee_id ON employees(employee_id);
    
  • employee_id가 유일한 값만 가질 수 있도록 보장하며, 중복을 방지할 수 있습니다.


3.3 Composite 인덱스 생성

  • 여러 열을 포함하는 Composite Index는 두 개 이상의 열을 조합하여 검색할 때 유용합니다.

  • sql

      CREATE INDEX idx_dept_salary ON employees(department_id, salary);
    
  • 이 인덱스는 department_idsalary를 함께 조건으로 사용할 때 성능을 향상시킵니다.

    • 예: SELECT * FROM employees WHERE department_id = 10 AND salary > 50000;

3.4 Function-based 인덱스 생성

  • 열에 특정 함수를 적용한 결과를 기준으로 인덱스를 생성할 수 있습니다.

  • 예를 들어, name 열을 대소문자 구분 없이 검색할 때 유용합니다.

  • sql

      CREATE INDEX idx_upper_name ON employees(UPPER(name));
    
  • 이렇게 하면 대소문자를 구분하지 않고 name 열을 검색할 수 있습니다.

    • 예: SELECT * FROM employees WHERE UPPER(name) = 'JOHN DOE';


4. 인덱스 활용 팁

  • 자주 조회되거나 정렬되는 열에 인덱스를 생성하면 좋습니다.

  • 인덱스는 데이터를 읽는 작업에서 성능을 향상시키지만, 데이터 변경(DML) 작업에서는 성능에 영향을 줄 수 있으므로 필요할 때만 생성하는 것이 좋습니다.

  • 데이터가 적은 테이블에는 인덱스가 큰 효과가 없을 수 있습니다.




  • 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
  • 일부 모바일 환경에서는 ❤️ 버튼이 보이지 않습니다.

728x90
반응형

+ Recent posts