✅ 용어 정리 요약
| 구분 | 개념 | 설명 | 설정방식 |
| 클러스터 인덱스 | 저장 방식 | PK 기준으로 테이블 자체가 정렬된 구조 (MySQL InnoDB 기본) | PK 지정하면 자동 생성 |
| 보조 인덱스 | 인덱스 위치 | PK 외 컬럼에 수동으로 생성한 인덱스 (실제 데이터 X) | CREATE INDEX 문으로 직접 생성 |
| 단일 인덱스 | 인덱스 구성 | 한 개 컬럼으로 만든 인덱스 | CREATE INDEX ON 테이블(컬럼) |
| 복합 인덱스 | 인덱스 구성 | 여러 개 컬럼으로 만든 인덱스 | CREATE INDEX ON 테이블(컬럼1, 컬럼2) |
| 커버링 인덱스 | 쿼리 최적화 결과 | 선택한 컬럼이 전부 인덱스에 포함되어 테이블 접근이 필요 없는 상황 | 단일 or 복합 인덱스를 잘 설계했을 때 "결과적으로" 되는 것 |
✅ 핵심 관계 도식
┌────────────────────────┐
│ 인덱스의 종류 │
└────────────────────────┘
▲
┌──────────────┼──────────────┐
│ │
클러스터 인덱스 (PK) 보조 인덱스 (일반 인덱스)
│ │
▼ ▼
테이블 자체 정렬됨 실제 데이터 없음 (PK만 가짐)
▶ 단일/복합 인덱스는 둘 다 가능
▶ 커버링 인덱스는 "단일 또는 복합 보조 인덱스"가 쿼리에 완벽히 매치될 때
1. 클러스터 인덱스
CREATE TABLE product (
id INT PRIMARY KEY, -- PK = 클러스터 인덱스
name VARCHAR(100),
price BIGINT
);
- id 기준으로 테이블이 정렬되어 저장됨
- SELECT * FROM product WHERE id = 10 → 곧바로 데이터 접근
2. 보조 인덱스 (단일)
CREATE INDEX idx_name ON product(name);
- name만 인덱싱
- 인덱스 구조: name → id
- 데이터를 가져오려면 id로 다시 테이블 접근 필요
3. 보조 인덱스 (복합)
CREATE INDEX idx_name_price ON product(name, price);
- 인덱스 구조: name, price → id
- WHERE name = 'Shirt' AND price = 10000 같이 쿼리하면 커버링 인덱스가 될 수 있음
4. 커버링 인덱스란?
-- 커버링 인덱스 상황
SELECT price FROM product WHERE name = 'Shirt';
-- 인덱스 idx_name_price(name, price)만 보고 끝냄!
❗ SELECT 컬럼들 + WHERE 조건 컬럼들이 모두 인덱스에 포함돼야 커버링 인덱스 적용 가능
✅ 정리
| 용어 | 포인트 | 포함관계 |
| 클러스터 인덱스 | PK 지정 시 자동 | 테이블 = 인덱스 |
| 보조 인덱스 | PK 외 수동 생성 | 인덱스 값 + PK 저장 |
| 단일/복합 인덱스 | 인덱스 대상 컬럼 수 차이 | 클러스터/보조 둘 다 가능 |
| 커버링 인덱스 | 결과적으로 쿼리가 인덱스만 보고 끝나는 경우 | 단일/복합 보조 인덱스에서 발생 |
커버링 인덱스는 단일/복합 인덱스 중 쿼리에 딱 맞는 경우
보조 인덱스는 PK만 저장하니까 테이블로 다시 가야 하지만
클러스터 인덱스는 테이블 그 자체니까 빠르게 직접 접근 가능
단일/복합은 구성 방식의 차이일 뿐이고, 커버링은 "결과"
'공부일기.. > DataBase' 카테고리의 다른 글
| [DB] 페이지네이션 종류 (커서 , 오프셋) (0) | 2025.11.30 |
|---|---|
| [mySql 인덱스 설계] 기본원칙, 설계방법 , 주의사항!!! (3) | 2025.07.28 |
| [DB 인덱스 개념 정리] B+Tree, 클러스터드 인덱스, 카디널리티, 커버링 인덱스, 디스크와 메모리 (2) | 2025.07.27 |
| [ERD] 이커머스 ERD 설계 과정: 정규화, 관계 설계, 제약 조건 (1) | 2025.07.18 |
| [MySql] 컬럼 일련번호 자동 증가 AUTO_INCREMENT (0) | 2025.06.20 |