Oracle
에서INDEX
는 테이블의 데이터를 빠르게 검색하기 위해 사용하는 데이터 구조입니다.- 인덱스(
INDEX
)는 테이블의 한 열이나 여러 열에 대해 만들어지며, 검색 성능을 향상시키는 데 도움을 줍니다. - 일반적으로 자주 사용되는 열이나
WHERE
절에 많이 사용되는 열에 인덱스를 생성하여 쿼리 성능을 최적화할 수 있습니다.
Oracle
에서는 다양한 종류의 인덱스를 제공합니다.- (1) B-tree Index : 가장 일반적인 인덱스 형태로, 대부분의 검색 및 정렬 작업에 적합합니다.
- (2) Bitmap Index : 값의 중복이 많은 열(예: 성별, 상태)에서 사용됩니다.
- (3) Unique Index : 유일한 값을 가지도록 제한하는 인덱스로, 기본 키와 같이 유일한 제약 조건을 보장할 때 사용됩니다.
- (4) Composite Index : 두 개 이상의 열로 구성된 인덱스로, 복합 검색을 최적화하는 데 사용됩니다.
- (5) Function-based Index : 함수나 표현식을 사용하여 계산된 값을 기준으로 인덱스를 생성합니다.
-
장점: 데이터 검색 속도를 향상시키며, 데이터베이스의 성능을 높입니다.
-
단점: 데이터를 삽입하거나 수정할 때 인덱스도 함께 업데이트되어야 하므로, 인덱스가 많으면 DML(Data Manipulation Language) 성능이 저하될 수 있습니다. 인덱스는 또한 디스크 공간을 추가로 차지합니다.
-
먼저 예제 테이블을 생성합니다.
-
sql
CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
name VARCHAR2(50),
department_id NUMBER,
salary NUMBER
);
-
가장 기본적인 인덱스 형태인
B-tree
인덱스를department_id
열에 생성해 보겠습니다. -
sql
CREATE INDEX idx_department ON employees(department_id);
-
이렇게 생성된 인덱스는
employees
테이블의department_id
열에 대해WHERE
절을 이용한 검색 속도를 향상시킵니다.- 예:
SELECT * FROM employees WHERE department_id = 10;
- 예:
-
특정 열의 값이 유일해야 할 때
UNIQUE
인덱스를 생성할 수 있습니다. -
sql
CREATE UNIQUE INDEX idx_employee_id ON employees(employee_id);
-
employee_id
가 유일한 값만 가질 수 있도록 보장하며, 중복을 방지할 수 있습니다.
-
여러 열을 포함하는
Composite Index
는 두 개 이상의 열을 조합하여 검색할 때 유용합니다. -
sql
CREATE INDEX idx_dept_salary ON employees(department_id, salary);
-
이 인덱스는
department_id
와salary
를 함께 조건으로 사용할 때 성능을 향상시킵니다.- 예:
SELECT * FROM employees WHERE department_id = 10 AND salary > 50000;
- 예:
-
열에 특정 함수를 적용한 결과를 기준으로 인덱스를 생성할 수 있습니다.
-
예를 들어,
name
열을 대소문자 구분 없이 검색할 때 유용합니다. -
sql
CREATE INDEX idx_upper_name ON employees(UPPER(name));
-
이렇게 하면 대소문자를 구분하지 않고
name
열을 검색할 수 있습니다.- 예:
SELECT * FROM employees WHERE UPPER(name) = 'JOHN DOE';
- 예:
-
자주 조회되거나 정렬되는 열에 인덱스를 생성하면 좋습니다.
-
인덱스는 데이터를 읽는 작업에서 성능을 향상시키지만, 데이터 변경(
DML
) 작업에서는 성능에 영향을 줄 수 있으므로 필요할 때만 생성하는 것이 좋습니다. -
데이터가 적은 테이블에는 인덱스가 큰 효과가 없을 수 있습니다.
- 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
- 일부 모바일 환경에서는 ❤️ 버튼이 보이지 않습니다.
'SQL' 카테고리의 다른 글
2정규형(2NF)의 개념 (0) | 2025.05.03 |
---|---|
1정규형(1NF)의 개념 (0) | 2025.05.03 |
Oracle Procedure 오라클 프로시저 프로시져 (0) | 2024.11.13 |
Oracle Trigger 오라클 트리거 (1) | 2024.11.13 |
Oracle INNER JOIN, OUTER JOIN 오라클 이너 조인 아우터 조인 (0) | 2024.11.13 |