← 아티클 목록

기본키와 인덱스 관계 헷갈리지 않게 정리

2029-01-01#database#기본키#인덱스

"기본키를 걸면 인덱스를 또 만들어야 하나요?" 입문자가 자주 막히는 지점입니다. 답부터 말하면 아닙니다. 기본키를 만들면 인덱스는 자동으로 따라옵니다. 둘은 같은 것이 아니지만 떼어놓을 수도 없는 관계입니다. 이 글에서는 기본키와 인덱스가 각각 무엇을 책임지고, 왜 기본키가 인덱스를 데리고 다니는지 정리합니다.

기본키와 인덱스는 역할이 다르다

구분기본키(Primary Key)인덱스(Index)
목적행을 유일하게 식별검색 속도 향상
중복허용 안 함허용함(일반 인덱스)
NULL불가가능
개수테이블당 1개여러 개
자동 인덱스생성됨본인이 인덱스

기본키는 "이 행은 누구인가"를 보장하는 제약 조건입니다. 인덱스는 "이 값을 어디서 빨리 찾을까"를 돕는 자료구조입니다. 목적이 다른데도 묶이는 이유는, 기본키가 유일성을 검사하려면 빠른 조회가 필수이기 때문입니다.

기본키가 인덱스를 만드는 이유

기본키에 새 값이 들어올 때마다 DB는 "이 값이 이미 있나?"를 확인해야 합니다. 인덱스가 없다면 매번 테이블 전체를 훑어야 하므로, DB는 기본키를 만들 때 자동으로 유니크 인덱스를 함께 생성합니다.

SQL
CREATE TABLE users (
  id    BIGINT PRIMARY KEY,   -- 여기서 유니크 인덱스가 자동 생성됨
  email VARCHAR(255)
);

-- email로 조회가 잦다면 인덱스를 별도로 추가
CREATE INDEX idx_users_email ON users(email);

id로 조회하는 쿼리(WHERE id = 100)는 별도 작업 없이 빠릅니다. 이미 인덱스가 있기 때문입니다. 하지만 WHERE email = '...' 같은 조회는 기본키와 무관하므로, 그 컬럼에 인덱스를 따로 만들어야 빨라집니다.

흔한 오해 정리

  • "인덱스가 있으면 다 기본키다" → 아닙니다. 일반 인덱스는 중복·NULL을 허용하고 식별 책임도 없습니다.
  • "기본키가 있으니 검색은 다 빠르다" → 기본키 컬럼으로 찾을 때만 빠릅니다. 다른 컬럼 검색은 그 컬럼 인덱스가 필요합니다.
  • "인덱스는 많을수록 좋다" → 아닙니다. 인덱스는 조회를 빠르게 하지만, INSERT·UPDATE 때마다 갱신 비용이 들어 쓰기가 느려집니다. 정말 자주 검색하는 컬럼에만 거는 것이 원칙입니다.

정리하면 기본키는 "식별 + 자동 인덱스" 두 일을 동시에 하고, 인덱스는 그중 "검색 속도" 한 가지를 일반화한 도구입니다. 기본키는 특수한 인덱스를 품은 제약 조건이라고 보면 관계가 선명해집니다.

요점 정리

  • 기본키는 행 식별(유일·NOT NULL)을, 인덱스는 검색 속도를 담당한다.
  • 기본키를 만들면 유니크 인덱스가 자동 생성되므로 따로 만들 필요가 없다.
  • 기본키가 아닌 컬럼 검색을 빠르게 하려면 인덱스를 별도로 추가한다.

EXPLAIN으로 인덱스가 있을 때와 없을 때 조회 계획이 어떻게 달라지는지 직접 확인하는 실습은 데이터베이스 트랙에서 회원가입 없이 무료로 할 수 있습니다.