SQL/개념
인덱스
데이터분석가 이채은
2024. 12. 28. 19:17
인덱스란?
"인덱스(Index)"는 데이터베이스에서 검색 속도를 향상하기 위해 사용하는 구조입니다. 책의 목차처럼 테이블의 특정 컬럼에 대해 빠르게 데이터를 찾을 수 있도록 돕습니다. 인덱스를 생성하면 데이터베이스가 해당 컬럼에 대해 정렬된 구조를 유지하여, 검색과 정렬 작업이 더 효율적으로 수행됩니다.
인덱스의 개념
- 빠른 데이터 검색:
- 테이블의 데이터 전체를 탐색(Full Table Scan)하지 않고, 인덱스를 통해 필요한 데이터를 빠르게 찾아냅니다.
- 정렬된 데이터 구조:
- 대부분의 인덱스는 B-Tree 구조를 사용하여 정렬된 상태를 유지합니다.
- 추가 저장 공간:
- 인덱스는 별도의 데이터 구조이므로 추가적인 저장 공간이 필요합니다.
- 쓰기 작업의 부담:
- 데이터를 삽입, 수정, 삭제할 때 인덱스를 갱신해야 하므로, 쓰기 성능은 약간 저하될 수 있습니다.
인덱스를 사용하는 이유
- 대규모 데이터베이스에서 검색 속도를 개선.
- WHERE, ORDER BY, GROUP BY, JOIN 등의 조건이 포함된 쿼리에서 성능 향상.
- 고유성을 보장하기 위해 UNIQUE INDEX를 생성.
인덱스의 종류
- 기본 인덱스 (Primary Index):
- 기본 키(Primary Key) 컬럼에 자동으로 생성됩니다.
- 유일성과 비어 있지 않은 값을 보장합니다.
- 보조 인덱스 (Secondary Index):
- 기본 키 외의 컬럼에 대해 생성한 인덱스.
- 검색 속도를 높이기 위해 사용.
- 유니크 인덱스 (Unique Index):
- 컬럼 값의 중복을 허용하지 않는 인덱스.
- 복합 인덱스 (Composite Index):
- 두 개 이상의 컬럼을 조합하여 생성한 인덱스.
- 다중 조건 검색에 유리.
- 클러스터형 인덱스 (Clustered Index):
- 테이블 데이터가 인덱스에 따라 정렬됩니다.
- MySQL의 InnoDB에서 기본 키가 클러스터형 인덱스로 생성.
- 비클러스터형 인덱스 (Non-Clustered Index):
- 인덱스와 실제 데이터가 별도로 저장됩니다.
- 주로 보조 인덱스에서 사용.
인덱스 생성
1. 기본 인덱스 생성:
CREATE INDEX idx_column_name ON table_name(column_name);
- idx_column_name: 인덱스 이름.
- column_name: 인덱스를 생성할 컬럼.
2. 유니크 인덱스 생성:
CREATE UNIQUE INDEX idx_unique_name ON table_name(column_name);
3. 복합 인덱스 생성:
CREATE INDEX idx_composite ON table_name(column1, column2);
4. 인덱스 확인:
SHOW INDEX FROM table_name;
5. 인덱스 삭제:
DROP INDEX idx_column_name ON table_name;
예제
-- 급여 검색 속도 향상을 위한 인덱스 생성
CREATE INDEX idx_salary ON employees(salary);
-- 특정 급여 이상인 직원 검색
SELECT name, salary
FROM employees
WHERE salary > 50000;