SQL 인덱스는 데이터베이스 테이블의 열 또는 열 조합에 대한 검색 속도를 높이기 위해 사용되는 데이터 구조입니다. 인덱스는 마치 책의 색인처럼 작동하여 특정 값을 빠르게 찾을 수 있도록 돕습니다. 이번 포스트에서는 SQL 인덱스의 개념, 종류, 장단점, 사용 시 고려사항 및 실습 예제를 자세히 알아보겠습니다.
주요 개념
1. 인덱스 생성 (CREATE INDEX)
인덱스는 특정 열에 대해 검색 성능을 향상시키기 위해 생성합니다.
CREATE INDEX idx_employee_name ON employees (last_name);
위의 예제는 employees
테이블의 last_name
열에 대해 인덱스를 생성하는 코드입니다.
2. 고유 인덱스 (UNIQUE INDEX)
고유 인덱스는 인덱스가 적용된 열의 값이 고유하도록 보장합니다.
CREATE UNIQUE INDEX idx_employee_email ON employees (email);
이 예제에서는 employees
테이블의 email
열에 대해 고유 인덱스를 생성하여 각 이메일 값이 유일함을 보장합니다.
3. 복합 인덱스 (Composite Index)
두 개 이상의 열을 결합하여 인덱스를 생성할 수 있습니다.
CREATE INDEX idx_employee_dept_job ON employees (department_id, job_id);
이 예제는 employees
테이블의 department_id
와 job_id
열에 대한 복합 인덱스를 생성합니다.
4. 클러스터형 인덱스 (Clustered Index)
클러스터형 인덱스는 테이블의 데이터가 실제로 인덱스 순서대로 정렬되고 저장되는 인덱스입니다. 대부분의 DBMS에서 기본 키(Primary Key)를 클러스터형 인덱스로 자동 생성합니다.
CREATE CLUSTERED INDEX idx_employee_id ON employees (employee_id);
5. 비클러스터형 인덱스 (Non-Clustered Index)
비클러스터형 인덱스는 데이터와 별도로 저장되는 인덱스입니다. 데이터는 테이블에 정렬되지 않고 인덱스만 정렬됩니다.
CREATE NONCLUSTERED INDEX idx_employee_name ON employees (last_name);
6. 인덱스 삭제 (DROP INDEX)
기존의 인덱스를 삭제할 때 사용됩니다.
DROP INDEX idx_employee_name;
인덱스의 장단점
장점
- 빠른 검색 성능: 인덱스를 사용하면 테이블을 풀 스캔하지 않고도 빠르게 데이터를 검색할 수 있습니다.
- 효율적인 정렬: ORDER BY 절을 포함한 쿼리의 성능이 향상됩니다.
- 고유성 보장: 고유 인덱스를 통해 중복 데이터를 방지할 수 있습니다.
단점
- 저장 공간: 인덱스를 생성하면 추가적인 저장 공간이 필요합니다.
- 쓰기 성능 저하: 데이터 삽입, 수정, 삭제 작업 시 인덱스를 업데이트해야 하므로 쓰기 성능이 저하될 수 있습니다.
- 복잡성 증가: 많은 인덱스를 사용하면 데이터베이스 관리가 복잡해질 수 있습니다.
인덱스 사용 시 고려사항
- 읽기와 쓰기 작업의 균형: 인덱스는 읽기 작업을 빠르게 하지만, 쓰기 작업을 느리게 할 수 있습니다. 읽기 작업이 많은 경우 인덱스를 더 많이 사용하고, 쓰기 작업이 많은 경우 인덱스를 최소화하는 것이 좋습니다.
- 적절한 열 선택: 자주 조회되는 열이나 WHERE, JOIN, ORDER BY 절에서 자주 사용되는 열에 인덱스를 생성하는 것이 좋습니다.
- 중복 인덱스 피하기: 동일한 열에 여러 인덱스를 생성하지 않도록 주의합니다.
인덱스 실습 예제
1. 기본 인덱스 생성
CREATE INDEX idx_last_name ON employees (last_name);
2. 고유 인덱스 생성
CREATE UNIQUE INDEX idx_email ON employees (email);
3. 복합 인덱스 생성
CREATE INDEX idx_dept_job ON employees (department_id, job_id);
4. 인덱스 삭제
DROP INDEX idx_last_name;
이와 같이 SQL 인덱스는 데이터베이스 성능 최적화에 중요한 역할을 하며,
적절한 인덱스 전략을 통해 데이터 검색 속도를 크게 향상시킬 수 있습니다.
'🗄️ Backend > SQL' 카테고리의 다른 글
데이터베이스 모델링 가이드 (0) | 2024.10.15 |
---|---|
SQL 권한 및 사용자 생성 가이드 (0) | 2024.10.15 |
뷰 생성, 관리 및 시퀀스 (4) | 2024.10.14 |
데이터베이스 제약조건의 종류와 예시 (0) | 2024.10.14 |
데이터베이스 트랜잭션 및 테이블 관리 (0) | 2024.10.14 |