[DB] 인덱스(INDEX) 와 키(KEY)의 관계

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

📌 관계를 정리하면

[인덱스] ⊃ [키]

🔹 키(Key)와 인덱스(Index)의 관계
✅ Primary Key와 Unique Key에는 자동으로 인덱스가 생성됨
✅ Foreign Key에는 자동으로 인덱스가 생성되지 않음 (수동으로 생성해야 성능 최적화)
✅ 인덱스는 검색 성능을 높이기 위해 존재하며, 키는 데이터 무결성을 유지하는 역할
✅ 인덱스는 키(Key)가 아닐 수도 있지만, 키(Key)는 인덱스를 포함할 수도 있음

🔹 인덱스(Index)란?
인덱스는 데이터 검색 속도를 높이는 보조적인 구조입니다.
특정 컬럼에 대해 미리 정렬된 데이터 구조를 유지하여, 검색할 때 전체 테이블을 읽지 않고 빠르게 데이터를 찾을 수 있도록 도와줍니다.
모든 키(Key)는 인덱스를 포함할 수도 있지만, 모든 인덱스가 키(Key)는 아닙니다.

🔹 키(Key)란?
키(Key)는 테이블의 데이터 무결성을 유지하는 제약 조건입니다.
키는 한 행을 고유하게 식별하거나(Primary Key, Unique Key) 두 테이블 간의 관계를 정의하는 역할(Foreign Key)을 합니다.
📌 주요 키의 종류:

1️⃣ Primary Key (기본 키)
테이블에서 각 행을 고유하게 식별하는 키
자동으로 Unique 제약 조건과 인덱스가 생성됨
NULL 값을 가질 수 없음

CREATE TABLE employees (
    emp_id INT PRIMARY KEY, -- emp_id가 기본 키(자동 인덱스 생성)
    name VARCHAR(100),
    department VARCHAR(50),
    salary INT
);
  • emp_id는 기본 키이므로, 자동으로 인덱스가 생성됨
  • 즉, 모든 Primary Key는 인덱스를 포함하지만, 모든 인덱스가 Primary Key는 아님

2️⃣ Unique Key (고유 키)

중복을 허용하지 않는 키
기본 키와 달리 NULL 값을 가질 수 있음

CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    email VARCHAR(255) UNIQUE -- email 컬럼에 Unique Key 설정
);
  • email 컬럼은 Unique Key이므로 자동으로 고유 인덱스(Unique Index)가 생성됨

3️⃣ Foreign Key (외래 키)

다른 테이블의 기본 키(Primary Key)를 참조하는 키
관계형 데이터베이스에서 데이터 무결성을 보장

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100)
);

CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
  • employees.department_id는 departments.department_id를 참조하는 외래 키
  • 외래 키에는 자동으로 인덱스가 생성되지 않음 (필요하면 직접 생성해야 함)

🚀 결론
"인덱스는 Key인가?"
❌ 아니요. 인덱스는 단순히 검색 성능을 향상시키는 도구이며, 데이터 무결성을 보장하는 Key와는 다릅니다.

✅ 하지만 Primary Key와 Unique Key에는 자동으로 인덱스가 생성되므로, Key는 인덱스를 포함할 수도 있습니다.
✅ Foreign Key에는 자동 인덱스가 없으므로, 성능을 위해 수동으로 생성해야 합니다.
✅ 인덱스가 있다고 해서 해당 컬럼이 반드시 키(Key)인 것은 아닙니다.

👉 즉, 모든 키는 인덱스를 포함할 수 있지만, 모든 인덱스가 키(Key)는 아닙니다! 🚀

🔹 인덱스(Index) vs 키(Key)의 포함 관계
✅ 모든 키(Key)는 인덱스를 포함할 수 있음 (Primary Key, Unique Key는 자동 인덱스 생성)
❌ 하지만 모든 인덱스가 키(Key)는 아님 (일반 인덱스는 데이터 무결성과 관계 없음)

즉, 키(Key)는 데이터 무결성을 유지하는 역할을 하고, 인덱스는 검색 속도를 높이는 역할을 합니다.

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

0개의 댓글