본문 바로가기

IT/DB

PK 2개일 경우 인덱스 특징

300x250

 

 

Primary Key(PK)가 2개 이상의 컬럼으로 구성된 경우, 이를 복합 Primary Key라고 합니다.

 

복합 PK를 생성하면 해당 컬럼 조합에 대해 자동으로 **복합 인덱스(Composite Index)**가 생성됩니다.

 

이 인덱스는 두 컬럼의 조합을 기반으로 정렬되고 검색 성능을 최적화합니다.


복합 Primary Key의 인덱스 작동 방식

  • 복합 PK는 두 개 이상의 컬럼 조합으로 고유성을 보장합니다.
  • 데이터베이스는 복합 PK를 생성하면서 자동으로 해당 컬럼 조합에 대해 B-Tree 인덱스를 생성합니다.
  • 이 인덱스는 아래와 같이 작동합니다:
    1. 첫 번째 컬럼(선행 컬럼): 인덱스는 주로 첫 번째 컬럼 값을 기준으로 정렬됩니다.
    2. 두 번째 컬럼(후행 컬럼): 첫 번째 컬럼 값이 동일할 때 두 번째 컬럼 값으로 정렬됩니다.

 

복합 PK 생성 예제

테이블 생성

 
CREATE TABLE Orders ( order_id INT, product_id INT, quantity INT, PRIMARY KEY (order_id, product_id) );
 

자동 생성된 인덱스

위 쿼리를 실행하면 (order_id, product_id)에 대해 복합 인덱스가 생성됩니다.


 

복합 인덱스의 특징

  1. 선행 컬럼과 후행 컬럼의 역할:
    • 인덱스는 선행 컬럼(order_id)후행 컬럼(product_id) 순서로 정렬됩니다.
    • 예를 들어, order_id가 101인 모든 행을 먼저 찾고, 그중에서 product_id를 기준으로 검색합니다.
  2. 단일 컬럼 조건 사용:
    • 선행 컬럼(order_id)만 조건에 사용될 경우 인덱스가 활용됩니다.
    • 하지만 후행 컬럼(product_id)만 조건에 사용되면 인덱스를 사용할 수 없습니다.

예제

-- 선행 컬럼 사용: 인덱스 활용 
SELECT * 
FROM Orders 
WHERE order_id = 101; 

-- 선행 및 후행 컬럼 사용: 인덱스 활용 
SELECT * 
FROM Orders 
WHERE order_id = 101 AND product_id = 202; 

-- 후행 컬럼만 사용: 인덱스 비활용 

SELECT * 
FROM Orders 
WHERE product_id = 202;
 
 
  1. 인덱스의 활용 범위:
    • 복합 인덱스는 첫 번째 컬럼(선행 컬럼)을 반드시 포함해야 효과적으로 동작합니다.
    • 후행 컬럼만으로는 인덱스의 효율성이 제한됩니다.

 

복합 PK의 장단점

장점

  • 다중 컬럼 조합을 통해 고유성을 보장합니다.
  • 특정 조건(선행 컬럼과 후행 컬럼 조합)에 대해 성능을 최적화합니다.
  • 별도의 인덱스를 생성하지 않아도 자동으로 복합 인덱스를 제공합니다.

단점

  • 후행 컬럼만 검색 시 인덱스 활용이 제한됩니다.
  • 복합 PK가 많아지면 인덱스 크기가 커져서 삽입/삭제 성능에 영향을 줄 수 있습니다.

 

복합 PK를 설계할 때 고려할 점

  1. 컬럼 순서:
    • 가장 자주 사용되는 검색 조건을 선행 컬럼으로 설정해야 인덱스 활용도가 높아집니다.
  2. 유일성 필요성:
    • 복합 PK로 고유성을 보장하려면 두 컬럼 조합이 실제로 고유해야 합니다.
  3. 인덱스 추가 여부:
    • 후행 컬럼 단독 검색이 빈번하다면 해당 컬럼에 별도 인덱스를 추가로 생성하는 것이 좋습니다.

예제: 후행 컬럼에 인덱스 추가

 
CREATE INDEX idx_product_id ON Orders (product_id);

요약

  • 복합 PK는 여러 컬럼을 조합하여 고유성을 보장하며, 데이터베이스는 자동으로 복합 인덱스를 생성합니다.
  • 인덱스는 선행 컬럼을 우선적으로 활용하며, 설계 시 검색 조건에 따라 컬럼 순서를 신중히 결정해야 합니다.
  • 후행 컬럼 단독 검색이 많다면 별도의 인덱스를 추가로 생성하는 것이 성능 향상에 도움이 됩니다.

 

 

 

300x250