ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DB] DB에서 인덱스란 무엇인가 — 인덱스 스캔과 시퀀스 스캔
    IT 2026. 1. 22. 17:58

    데이터베이스를 쓰다 보면 언젠가는 이런 말을 듣게 됩니다.

    “이 쿼리는 인덱스를 안 타서 느려요”

    인덱스는 성능 이야기에서 빠지지 않지만, 막상 설명하려고 하면 막연해지기 쉬운 개념이기도 합니다. 이 글에서는 인덱스를 단순한 최적화 기법이 아니라, 데이터를 어떻게 탐색할 것인가에 대한 전략으로 풀어보려 합니다.


    데이터베이스는 기본적으로 ‘줄 세워진 데이터’다

    테이블은 개념적으로는 행의 집합이지만, 물리적으로는 디스크 위에 연속적으로 저장된 데이터에 가깝습니다.

    [ row1 ][ row2 ][ row3 ][ row4 ] ...

    이 상태에서 특정 조건을 만족하는 데이터를 찾는 가장 단순한 방법은 처음부터 끝까지 하나씩 확인하는 것입니다. 이것이 바로 시퀀스 스캔(Sequential Scan) 입니다.


    시퀀스 스캔이란 무엇인가

    시퀀스 스캔은 말 그대로 테이블의 첫 행부터 마지막 행까지 순서대로 읽는 방식입니다.

    • 조건에 맞든 안 맞든 모든 행을 확인
    • 구현이 단순하고 예측 가능
    • 데이터가 적을 때는 오히려 빠를 수 있음

    그래서 시퀀스 스캔은 “느린 방식”이라기보다는 가장 기본적인 탐색 방식이라고 보는 편이 정확합니다.


    그렇다면 인덱스는 왜 필요한가

    데이터가 많아질수록 시퀀스 스캔의 비용은 기하급수적으로 증가합니다. 이때 등장하는 것이 인덱스입니다.

    인덱스를 한 문장으로 정의하면 이렇습니다.

    인덱스는 테이블의 일부 컬럼을 기준으로 만든 별도의 정렬된 자료구조

    책의 맨 뒤에 있는 색인과 비교하면 이해가 쉽습니다. 책 전체를 처음부터 읽지 않고도 원하는 내용을 빠르게 찾을 수 있는 이유는, 이미 정렬된 목록이 있기 때문입니다.


    인덱스 스캔은 어떻게 동작하는가

    인덱스가 존재하면 데이터베이스는 다음과 같은 순서로 동작합니다.

    1. 인덱스에서 조건에 맞는 값의 위치를 찾고
    2. 그 위치가 가리키는 실제 테이블의 행으로 이동
    3. 필요한 데이터를 읽어온다

    이 방식이 바로 인덱스 스캔(Index Scan) 입니다.

    여기서 중요한 점은, 인덱스는 데이터를 직접 담고 있지 않고 데이터의 위치에 대한 정보를 담고 있다는 사실입니다.


    인덱스 스캔이 항상 빠를까

    직관적으로는 인덱스를 쓰는 것이 항상 빠를 것 같지만, 실제로는 그렇지 않습니다.

    • 조건에 해당하는 행이 너무 많을 때
    • 테이블의 대부분을 읽어야 할 때
    • 인덱스를 거쳐 테이블을 계속 오가는 비용이 클 때

    이런 경우에는 오히려 시퀀스 스캔이 더 효율적일 수 있습니다. 그래서 데이터베이스는 항상 옵티마이저를 통해 어떤 스캔 방식을 쓸지 결정합니다.


    인덱스 스캔 vs 시퀀스 스캔의 관점 차이

    두 스캔 방식의 차이는 속도 이전에 탐색 철학의 차이입니다.

    • 시퀀스 스캔 → “전부 보고 고른다”
    • 인덱스 스캔 → “필요한 것만 찾아간다”

    데이터가 작을 때는 전부 보는 것이 합리적이고, 데이터가 클수록 찾아가는 전략이 빛을 발합니다.


    인덱스도 비용이다

    인덱스는 공짜가 아닙니다.

    • 저장 공간을 추가로 사용하고
    • INSERT, UPDATE, DELETE 시 인덱스도 함께 수정해야 합니다

    즉, 인덱스는 읽기 성능을 얻는 대신 쓰기 비용을 지불하는 구조입니다. 그래서 무작정 많이 만드는 것은 오히려 성능을 해칠 수 있습니다.


    마무리하며

    인덱스는 단순한 튜닝 기법이 아니라, 데이터베이스가 데이터를 바라보는 방식 그 자체입니다.

    • 시퀀스 스캔은 기본값이고
    • 인덱스 스캔은 선택지이며
    • 어떤 선택이 옳은지는 데이터의 크기와 분포에 달려 있습니다

    이 관점을 이해하면, 실행 계획(EXPLAIN)을 볼 때도 결과가 단순한 숫자가 아니라 의사결정의 흔적으로 보이기 시작합니다.

Designed by Tistory.