SQL & 데이터베이스/SQL 성능 최적화 & 튜닝

[SQL] 인덱스(INDEX) 활용하여 SQL 성능 최적화하기

Jinsapp 2025. 3. 11. 14:58

📌 [SQL] 인덱스(INDEX) 활용하여 SQL 성능 최적화하기

📌 인덱스(INDEX)란?

인덱스(INDEX)는 데이터베이스에서 특정 컬럼의 검색 속도를 향상시키기 위한 자료구조입니다.
책의 목차처럼 테이블에서 원하는 데이터를 더 빠르게 찾을 수 있도록 도와주는 역할을 합니다.


📌 인덱스가 SQL 성능을 개선하는 이유

  • ✅ **검색 속도 향상** – 인덱스가 없는 경우, 모든 데이터를 하나씩 검사(Full Table Scan)하지만, 인덱스를 사용하면 특정 데이터만 빠르게 검색 가능
  • ✅ **조인(Join) 성능 향상** – 인덱스를 활용하면 조인 연산 시 불필요한 연산을 줄여 속도를 높일 수 있음
  • ✅ **정렬 성능 개선** – ORDER BY 사용 시, 인덱스가 있으면 정렬 연산이 빨라짐
  • ✅ **그룹화 연산 속도 증가** – GROUP BY, DISTINCT 등의 연산에서 불필요한 정렬을 줄일 수 있음

📌 인덱스 적용 예제

1️⃣ 기본 인덱스 생성 및 활용

설명: 인덱스를 사용하여 검색 성능을 향상시킬 수 있습니다.

기본 테이블 예제:


CREATE TABLE employees (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(100),
    department VARCHAR2(50),
    salary NUMBER
);

인덱스 없이 실행되는 쿼리 (Full Table Scan 발생 가능):


SELECT * FROM employees WHERE name = 'John Doe';

해결 방법: 인덱스 생성


CREATE INDEX idx_employees_name ON employees(name);

인덱스 적용 후 실행 계획 확인:


EXPLAIN PLAN FOR
SELECT * FROM employees WHERE name = 'John Doe';

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

2️⃣ 복합(Composite) 인덱스 활용

설명: 여러 개의 컬럼을 포함하는 인덱스를 생성하면, 다중 조건 검색 시 성능이 향상됩니다.

복합 인덱스 생성:


CREATE INDEX idx_employees_name_department
ON employees(name, department);

복합 인덱스가 적용되는 쿼리:


SELECT * FROM employees WHERE name = 'John Doe' AND department = 'IT';

주의사항: 복합 인덱스는 왼쪽(leading) 컬럼이 먼저 검색 조건에 포함될 때 최적화 효과를 가짐.


3️⃣ 유니크(UNIQUE) 인덱스 활용

설명: 유니크 인덱스는 **중복을 허용하지 않는 인덱스**로, 테이블의 무결성을 유지하는 데 사용됩니다.

유니크 인덱스 생성:


CREATE