IT/DB

외래키와 인덱스 관계는?

RM_ 2025. 5. 12. 12:28
728x90
반응형

 

 

외래키(Foreign Key)와 인덱스(Index)는 서로 다른 개념이지만, 성능 및 무결성 유지 측면에서 밀접한 관계가 있습니다.

 

 


✅ 기본 개념 정리

개념 설명
외래키 (Foreign Key) 다른 테이블의 기본키(또는 유니크 키)를 참조하는 제약 조건 (무결성 유지 목적)
인덱스 (Index) 데이터를 빠르게 찾기 위한 자료구조 (성능 향상 목적)
 

🔗 외래키와 인덱스의 관계

🔸 1. **참조 대상 칼럼(=부모 테이블 키)**에는 인덱스가 반드시 있어야 함

  • 외래키는 부모 테이블의 기본키나 유니크 인덱스 컬럼만 참조 가능
  • 즉, 외래키는 기본적으로 인덱스를 가진 컬럼만 참조할 수 있음

 

🔸 2. **외래키 칼럼(=자식 테이블의 참조 컬럼)**에는 인덱스가 자동 생성되지 않음

  • 대부분의 DBMS(MySQL, PostgreSQL 등)는 외래키 선언 시 자동 인덱스를 만들지 않음
  • 하지만 DELETE, UPDATE, JOIN 시 성능 문제가 생길 수 있음
  • 👉 따라서 실무에서는 외래키 칼럼에 수동으로 인덱스를 생성하는 것이 일반적

⚠️ 외래키 인덱스 미존재 시 문제점

상황 결과
부모 테이블에서 삭제할 때 자식 테이블 전체 스캔 (성능 저하)
JOIN할 때 외래키 컬럼 검색 속도 느림
데이터 무결성 체크 전체 탐색 필요로 성능 손실 가능
 

✅ 실무 팁: 외래키에는 인덱스를 수동으로 생성하자

예:

-- 고객 테이블
CREATE TABLE customers (
  id INT PRIMARY KEY,
  name VARCHAR(100)
);

-- 주문 테이블 (외래키 + 인덱스)
CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT,
  FOREIGN KEY (customer_id) REFERENCES customers(id)
);

-- 외래키 컬럼에 인덱스 추가
CREATE INDEX idx_orders_customer_id ON orders(customer_id);
 

✅ 요약

항목 설명
외래키는 참조 대상이 인덱스(보통 PK/UK)여야 함 ✅ 필수
외래키 컬럼에는 인덱스가 자동 생성되지 않음 ❌ 수동으로 생성 필요
외래키 + 인덱스 조합 ✅ 성능 향상 및 무결성 유지에 필수
 

 

 

 

300x250
반응형