[DB] 인덱스

J._NA 개발일지·2025년 2월 18일

인덱스가 무엇일까

  • 데이터베이스 테이블에서 빠르게 데이터를 검색할 수 있도록 돕는 구조
  • 책의 목차처럼 특정 열(Column)에 대한 정렬된 정보를 저장하여 검색 성능을 향상

WHERE 조건문과의 차이점

  • 인덱스는 단순히 데이터 검색 속도를 높이기 위한 구조이며, WHERE 절이 필터링할 때 인덱스를 사용할 수도 있지만, WHERE 절 자체가 인덱스는 아닙니다.
  • WHERE 조건문이 인덱스를 사용할 수도 있음
    (인덱스가 걸려 있는 컬럼이라면, 데이터베이스가 인덱스를 활용하여 검색 속도를 최적화할 수 있음.)

정리

✅ WHERE 조건문은 인덱스가 아니다.
✅ WHERE 조건문이 인덱스를 활용할 수도 있다. (하지만 항상 그런 것은 아님)
✅ 인덱스를 활용하려면 적절한 컬럼에 인덱스를 설정해야 한다.
✅ 함수나 연산이 포함되면 인덱스가 제대로 작동하지 않을 수도 있다.

즉, 인덱스는 데이터 검색을 빠르게 하는 도구이고, WHERE 절은 특정 조건에 맞는 데이터를 필터링하는 SQL 문법입니다

OPEN SQL 예시

CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    name VARCHAR(100),
    department VARCHAR(50),
    salary INT
);

CREATE INDEX idx_department ON employees(department);


SELECT * FROM employees WHERE department = 'HR';

🔹 인덱스 활용 가능:

department 컬럼에 인덱스가 있기 때문에 빠르게 조회 가능
데이터가 많을 경우, 인덱스를 활용하여 특정 부서만 빠르게 찾음

인덱스를 사용하지 않을 경우

  • 만약 department 컬럼에 인덱스가 없거나, 인덱스를 비효율적으로 사용하는 경우 전체 테이블을 스캔

다중 컬럼 인덱스 (Composite Index)

  • 여러 개의 컬럼에 인덱스를 설정하면 특정 조건을 더 빠르게 검색할 수 있음
CREATE INDEX idx_department_salary ON employees(department, salary)

인덱스 활용 가능

  • department와 salary가 둘 다 인덱스에 포함되었으므로 빠르게 검색 가능
  • department를 먼저 필터링한 후, salary 조건을 적용

🔸 주의:
department가 먼저 사용되지 않으면 인덱스가 최적화되지 않을 수 있음
다중 컬럼 인덱스는 설정된 순서대로 활용하는 것이 중요
➡ 해결 방법: 조회 패턴을 고려해서 인덱스를 설계해야 함

결론
✅ WHERE 절은 데이터를 필터링하지만, 인덱스를 자동으로 사용하지는 않는다.
✅ 인덱스가 설정된 컬럼에 대해 적절한 방식으로 검색하면 성능이 향상된다.
✅ 연산이나 함수(예: UPPER(), salary + 1000 등)를 사용하면 인덱스가 비효율적일 수 있다.
✅ OR 조건보다는 UNION을 사용하거나 다중 컬럼 인덱스를 고려할 수 있다.
✅ LIKE 검색에서 %의 위치에 따라 인덱스 활용 여부가 달라진다.

🚀 인덱스를 잘 활용하면 SQL 성능이 크게 향상될 수 있으므로, WHERE 조건을 최적화하는 것이 중요합니다!

profile
아밥 & 프론트엔드 개발자

0개의 댓글