🔹 키(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
);
2️⃣ Unique Key (고유 키)
중복을 허용하지 않는 키
기본 키와 달리 NULL 값을 가질 수 있음
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE -- email 컬럼에 Unique Key 설정
);
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)
);
🚀 결론
"인덱스는 Key인가?"
❌ 아니요. 인덱스는 단순히 검색 성능을 향상시키는 도구이며, 데이터 무결성을 보장하는 Key와는 다릅니다.
✅ 하지만 Primary Key와 Unique Key에는 자동으로 인덱스가 생성되므로, Key는 인덱스를 포함할 수도 있습니다.
✅ Foreign Key에는 자동 인덱스가 없으므로, 성능을 위해 수동으로 생성해야 합니다.
✅ 인덱스가 있다고 해서 해당 컬럼이 반드시 키(Key)인 것은 아닙니다.
👉 즉, 모든 키는 인덱스를 포함할 수 있지만, 모든 인덱스가 키(Key)는 아닙니다! 🚀
🔹 인덱스(Index) vs 키(Key)의 포함 관계
✅ 모든 키(Key)는 인덱스를 포함할 수 있음 (Primary Key, Unique Key는 자동 인덱스 생성)
❌ 하지만 모든 인덱스가 키(Key)는 아님 (일반 인덱스는 데이터 무결성과 관계 없음)
즉, 키(Key)는 데이터 무결성을 유지하는 역할을 하고, 인덱스는 검색 속도를 높이는 역할을 합니다.