테크

PK,FK 그리고 Index

Gyunorld 2025. 4. 10. 18:04

RDBMS를 사용하면 PK,FK와 Index를 많이 사용한다. 하지만 자세한 개념에 대해서는 생각해본 적이 없다... 생각난 김에 한 번 정리를 해보려고 한다.

 

[ Index ]

  • Index의 개념
    • 인덱스는 DB에서 데이터를 효율적으로 검색하기 위해서 사용하는 데이터 구조이다. 테이블의 특정 컬럼에 대해서 생생되며, 해당 칼럼 값과 데이터가 저장된 위치를 연결하는 포인터가 포함된다. 이러한 구조로 인해서 전체 테이블을 스캔하지 않고 필요한 데이터를 빠르게 찾을 수 있다.
     

Index를 잘 설명한 그림인 것 같다.

  • Index의 장점
    • 대규모 테이블에서 데이터를 효율적으로 검색하여 데이터의 검색 속도가 빨라진다.
    • 정렬 혹은 필터링에 최적화되어있다.
    • 전체 테이블 스캔을 하는 경우가 줄어들어서 리소스가 절약된다.
  • Index의 단점
    • 인덱스를 저장하기 위한 추가 저장 공간이 필요하다.
    • 쓰기 작업(INSERT, UPDATE, DELETE) 시 인덱스도 업데이트를 진행해야 하므로 성능 저하가 발생할 가능성이 크다.
  • Index 사용 시 주의사항
    • 읽기 성능 향상을 위해서 너무 많은 인덱스를 생성하면 쓰기 성능이 저하될 수 있다.
    • 데이터의 특성과 쿼리 패턴을 파악해서 적절한 인덱스를 사용해야 한다.

[ Primary Key (PK) ]

  • PK의 개념
    • PK는 테이블 내에서 각 행을 고유하게 식별할 수 있는 칼럼이다. 중복 값과 NULL 값을 포함할 수 없다. PK를 사용한다면 데이터의 무결성을 유지하고 효율적인 검색과 업데이트를 지원한다.
  • PK의 특징
    • 유일성 : 테이블 내에서 각 레코드가 고유하다.
    • Null 불허 : PK는 NULL 값을 포함할 수 없다.
    • 암묵적 인덱스 생성 : PK를 설정하면 DB가 자동으로 해당 칼럼에 인덱스를 생성한다.
  • PK의 역할
    • 데이터 무결성 유지: 중복 및 NULL 값을 방지하여 데이터 정확성을 보장한다.
    • 레코드 식별: 각 행을 고유하게 식별하여 검색, 업데이트, 삭제 작업을 효율적으로 수행한다.
    •  테이블 간 관계 설정: FK를 통해 다른 테이블과 연결하여 참조 무결성을 유지한다.
    • 쿼리 성능 향상: 암묵적으로 생성된 인덱스를 통해 빠른 데이터 검색 가능하다.
  • PK 사용 시 주의사항
    • 적절한 키 선택 : 고유하고 NULL값이 없으며 시간이 지나도 변하지 않는 값을 선택해야 한다.
    • 복합 키 사용 여부 : 단일 칼럼으로 식별이 불가능한 경우 복합 키를 사용할 수 있지만 최소한의 칼럼만 포함되어야 한다.
    • 대리 키 사용여부 : 고유한 값을 그대로 PK로 사용할 수 있지만 Auto Increment와 같은 시스템에서 생성한 고유ID를 이용하여 관리하는 것이 보안적인 측면에서 우수하지만 복합 키를 사용할 수 있어야 하기 때문에 설계 시에 고려해야 한다.

[ Foreign Key (FK) ]

  • FK의 개념
    • FK는 두 테이블 간의 관계를 설정하는데 사용되는 칼럼이다. FK는 다른 테이블의 PK 또는 Unique Key를 참조하도록 설정된 제약 조건이다. 두 테이블 간의 관계를 형성하고 데이터의 일관성을 보장한다.
  • FK의 특징
    • 참조 무결성 유지 : FK로 사용되는 값은 반드시 참조하는 부모 테이블의 PK 또는 Unique Key값이다. PK와 달리 NULL 값을 가질 수 있는데 NULL은 부모 테이블과 연결되지 않았음을 의미한다.
    • 부모-자식 관계 형성 : 부모 테이블과 자식 테이블 간의 관계를 정의하며, 일반적으로 1 : N 관계를 나타낸다.
    • 데이터 변경 제약 : 부모 테이블에서 PK 값이 변경되거나 삭제될 경우 자식 테이블의 FK도 영향을 받는다.
    • 쿼리 최적화 : FK가 인덱스를 생성하여 JOIN이나 데이터 검색 속도를 향상 시킨다.
  • FK의 역할
    • 데이터 무결성 보장 : FK는 잘못된 참조를 방지하여 DB 내에서 일관성을 유지한다.
    • 관계형 데이터 표현 : 테이블 간의 논리적 연결을 명확하게 하여 데이터를 구조화하여 관리할 수 있다.
  • FK 사용 시 주의사항
    • 적절한 참조 설정 : FK는 반드시 부모 테이블의 PK 또는 Unique Key를 참조해야 하며, 참조하는 칼럼과 데이터 타입이 동일해야 한다.
    • 성능 고려 : FK의 제약 조건으로 인해서 대규모 DB에서 업데이트나 삭제 작업 시에 성능 저하가 발생할 수 있다.
    • 동작 정의 : FK와 관련된 동작을 병확히 설정하여 예상치 못한 데이터 손실을 방지한다. (ex | ON DELETE CASCADE, ON UPDATE CASCADE, SET NULL)
    • 인덱스 생성 : FK에 인덱스를 명시적으로 생성하면 JOIN 이나 검색 성능이 크게 향상된다.

'테크' 카테고리의 다른 글

정보 보안 기법  (0) 2025.05.23
RDBMS와 NoSQL  (0) 2025.03.25
비동기 프로그래밍이란?  (0) 2025.02.13