SQL

[DB Optimization#4] Primary Key

j.d 2025. 4. 17. 01:56

데이터베이스에서 성능 향상을 위해 사용하는 대표적인 도구 중 하나가 인덱스(Index)입니다.
그런데 우리가 별도로 인덱스를 생성하지 않아도, 기본적으로 적용되는 인덱스가 하나 있습니다.
바로 Primary Key(기본키)입니다.

 

 

기본키(Primary Key, PK)란?

기본키란 테이블의 각 행(row)을 고유하게 식별하기 위한 컬럼(또는 컬럼 조합)입니다.
대부분의 테이블은 데이터를 구분하기 위해 PK를 지정하며, 한 행마다 중복되지 않는 유일한 값을 갖게 됩니다.

2025.04.15 - [SQL] - [Database Modeling#3] Primary Key, Foreign Key란?

 

[Database Modeling#3] Primary Key, Foreign Key란?

관계형 데이터베이스(Relational Database)가 널리 사용되면서, 서로 연관된 데이터를 일관성 있고 효율적으로 관리하는 방법이 절실해졌습니다. 데이터는 여러 테이블에 나뉘어 저장되는데, 이를 연

just-data.tistory.com

 

 

그런데 PK가 인덱스라고?

그렇습니다. 기본키에는 자동으로 인덱스가 생성되며,
이 인덱스는 단순 검색 성능 향상을 넘어서 데이터 정렬 방식에도 영향을 줍니다.

PK는 단순한 고유 식별자가 아니라, 클러스터링 인덱스(Clustering Index) 의 역할까지 수행합니다.
즉, PK 기준으로 데이터가 정렬된 채 저장됩니다.

 

 

 

정말 정렬될까?

다음 예제를 통해 확인해보겠습니다.

 

먼저, 예시 데이터 하나를 생성해주도록 하겠습니다.

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

INSERT INTO users (id, name) VALUES 
(1, 'a'),
(3, 'b'),
(5, 'c'),
(7, 'd');

결과)

id name
1 a
3 b
5 c
7 d

 

데이터는 id 기준으로 정렬되어 보입니다.
이제 한 번 순서를 바꿔봅시다.

UPDATE users
SET id = 2
WHERE id = 7;

결과)

id name
1 a
2 d
3 b
5 c

 

id = 2가 원래 id = 7에 있던 값인데,
id 값만 바꿨는데도 자동으로 정렬이 다시 이루어진 것을 볼 수 있습니다.

 

왜 정렬될까?

이는 PK가 클러스터링 인덱스이기 때문입니다.
MySQL(InnoDB 엔진)은 기본적으로 하나의 클러스터링 인덱스를 테이블에 적용하는데,
이 클러스터링 인덱스는 바로 Primary Key입니다.

  • 클러스터링 인덱스란?
    원본 데이터 자체가 인덱스 구조에 맞게 정렬된 상태로 저장되는 인덱스입니다.

즉, PK = 클러스터링 인덱스라고 이해하면 됩니다.
(보조 인덱스와 구분되며, 테이블 당 하나만 존재합니다.)

 

실제로 인덱스가 적용되어 있는지 확인해보면

SHOW INDEX FROM users;

→ users 테이블에 자동 생성된 PRIMARY라는 인덱스를 확인할 수 있습니다.