
이번 포스팅에서는 데이터베이스 성능 최적화의 핵심인 INDEX(인덱스) 에 대해 배워봅니다.
빠른 검색과 조회 성능 향상에 꼭 필요한 개념이지만, 무분별한 사용은 오히려 성능을 떨어뜨릴 수 있어요 💡
INDEX는 테이블에서 데이터를 더 빠르게 찾기 위한 자료 구조입니다.
책의 목차, 사전의 가나다 순 배열처럼 '찾기 쉽게 정리된 표' 라고 생각하시면 됩니다.
PRIMARY KEY로 자동 생성됨CREATE TABLE employees (
emp_id INT NOT NULL PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
department VARCHAR(50),
email VARCHAR(100) UNIQUE,
salary INT,
hire_date DATE
);
SHOW INDEX FROM employees;
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Index_type |
|---|---|---|---|---|---|---|---|
| employees | 0 | PRIMARY | 1 | emp_id | A | 8 | BTREE |
| employees | 0 | 1 | A | 8 | BTREE |
✅ PRIMARY → 클러스터형 인덱스
✅ UNIQUE 인덱스 (email) → 보조 인덱스
PRIMARY이면 클러스터형 인덱스-- 방법 1: CREATE INDEX
CREATE INDEX idx_department ON employees(department);
-- 방법 2: ALTER TABLE
ALTER TABLE employees ADD INDEX idx_salary(salary);
ALTER TABLE employees DROP INDEX idx_department;
ALTER TABLE employees DROP INDEX idx_salary;
📌 UNIQUE 제약조건을 주면 자동으로 보조 인덱스로 생성됩니다.
CREATE TABLE employees (
emp_id INT NOT NULL PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
department VARCHAR(50),
email VARCHAR(100) NOT NULL UNIQUE,
salary INT,
hire_date DATE,
UNIQUE INDEX idx_emp_email (email),
INDEX idx_emp_dept (department)
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
| 개념 | 설명 |
|---|---|
| INDEX | 데이터 검색 속도 향상을 위한 색인 구조 |
| Clustered Index | 데이터가 실제 정렬되어 저장됨 (PRIMARY KEY에 자동 생성) |
| Secondary Index | 별도 색인만 따로 유지, 여러 개 가능 |
| CREATE INDEX | 인덱스 생성 (또는 ALTER TABLE 방식으로도 가능) |
| DROP INDEX | 기존 인덱스 삭제 |
인덱스는 SELECT 성능을 극적으로 향상시킬 수 있지만, INSERT/UPDATE 성능은 저하시킬 수 있습니다.
읽기/쓰기 비율과 조회 패턴, 데이터 분포를 고려해 전략적으로 사용해야 합니다.
그럼 다음 포스팅에서 만나요! 👋