복합 인덱스 열 순서
가장 왼쪽 접두사 규칙과 작업 부하에 맞는 열 순서 선택법을 알아봅니다.
복합 인덱스 열 순서은(는) CoddyKit의 무료 SQL Interview Prep 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
복합 인덱스에 관한 질문
단일 열 인덱스를 설명할 수 있게 되면 면접관은 난도를 높여 다음과 같이 묻습니다. ‘고객 식별자와 주문 날짜를 함께 사용해 질의합니다. 어떻게 인덱싱하시겠습니까?’ 기대하는 답변은 복합(다중 열) 인덱스와 열 순서에 대한 근거입니다.
이 레슨에서는 앞으로 받게 될 거의 모든 복합 인덱스 질문을 설명해 주는 핵심 개념인 왼쪽 우선 접두사 규칙을 배웁니다.
복합 인덱스란 무엇인가
복합 인덱스는 여러 열을 순서가 있는 튜플로 인덱싱합니다. 항목은 첫 번째 열을 기준으로 정렬되고, 값이 같은 항목끼리는 두 번째 열을 기준으로 정렬되며, 이후 열도 같은 방식으로 정렬됩니다. 성을 기준으로 정렬한 다음 이름을 기준으로 정렬하는 전화번호부와 정확히 같습니다.
선언한 열 순서에 따라 정렬 우선순위가 결정되므로 열 순서는 매우 중요합니다.
CREATE INDEX idx_orders_cust_date
ON orders (customer_id, order_date);왼쪽 우선 접두사 규칙
핵심 규칙은 다음과 같습니다. (A, B, C)에 대한 복합 인덱스는 다음 열의 왼쪽 우선 접두사를 기준으로 필터링하는 질의에 사용할 수 있습니다.
A만 사용하면 가능합니다.A, B를 사용하면 가능합니다.A, B, C를 사용하면 가능합니다.B만 사용하면 NO입니다.B, C만 사용하면 NO입니다.
전화번호부를 생각해 보십시오. ‘스미스’라는 성을 가진 사람은 모두 찾을 수 있지만, 성과 관계없이 이름이 ‘존’인 사람을 효율적으로 모두 찾을 수는 없습니다. 전화번호부가 그런 순서로 정렬되어 있지 않기 때문입니다.
예제로 살펴보기: 접두사 일치
(customer_id, order_date)에 대한 인덱스는 다음 질의에서 첫 번째 열로 customer_id를 사용하므로 활용할 수 있습니다.
첫 번째 질의는 선행 열만 사용합니다. 두 번째 질의는 두 열을 모두 사용하여 먼저 customer_id로 범위를 좁힌 다음 해당 고객의 날짜순 항목 안에서 원하는 위치를 찾습니다.
-- Uses the index (leading column)
SELECT * FROM orders WHERE customer_id = 42;
-- Uses the index fully (both columns, in order)
SELECT * FROM orders
WHERE customer_id = 42
AND order_date >= '2026-01-01';예제로 살펴보기: 접두사 불일치
이 질의는 두 번째 열만 필터링하므로 (customer_id, order_date)에 대한 인덱스를 일반적으로 조회에 사용할 수 없습니다. 항목이 전체적으로 order_date 기준으로 정렬되어 있지 않기 때문입니다.
order_date만 필터링하는 패턴이 자주 사용된다면 order_date를 첫 열로 사용하는 별도의 인덱스가 필요합니다.
-- Does NOT use idx_orders_cust_date efficiently
SELECT * FROM orders
WHERE order_date >= '2026-01-01';
-- Fix: an index that leads with order_date
CREATE INDEX idx_orders_date ON orders (order_date);범위보다 먼저 동등 비교
시니어 수준에서 알아야 할 개선 사항은 다음과 같습니다. 동등 비교 (=)에 사용하는 열을 범위 (<, >, BETWEEN)에 사용하는 열보다 앞에 배치하십시오. 인덱스가 범위 열에 도달하면 이후 열을 조회 범위를 좁히는 데 더 이상 사용할 수 없습니다.
status = 'paid' AND created_at > ?와 같은 질의에서는 올바른 순서가 (status, created_at)이며, 그 반대 순서는 적절하지 않습니다.
-- Query: WHERE status = 'paid' AND created_at > '2026-01-01'
-- Good: equality column first
CREATE INDEX idx_orders_status_created
ON orders (status, created_at);첫 번째 열 선택하기
어떤 열을 첫 번째에 배치할지는 어떻게 정할까요? 면접관은 실제 작업 부하를 바탕으로 한 답변을 기대합니다.
- 특히 동등 비교 필터로 사용되는 경우, 가장 많은 질의에 나타나는 열을 첫 번째에 배치하십시오.
- 선택도가 높은 열(서로 다른 값이 많은 열)을 우선하십시오. 첫 단계에서 가장 많은 행을 제거할 수 있기 때문입니다.
- ORDER BY 요구 사항을 고려하십시오. 인덱스 순서를 맞추면 정렬을 피할 수 있습니다.
첫 번째 열은 실제 질의 조합에서 가장 많은 필터링 작업을 담당하는 열입니다.
복합 인덱스는 정렬도 돕습니다
복합 인덱스는 왼쪽 우선 접두사에 대한 ORDER BY에도 사용할 수 있습니다. 항목이 customer_id로 정렬된 다음 order_date로 정렬되므로, 한 고객의 주문을 날짜순으로 정렬하는 질의는 사실상 추가 비용이 없으며 별도의 정렬도 필요하지 않습니다.
-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;중복 인덱스를 겹쳐 만들지 마십시오
지원자들은 인덱스를 과도하게 추가하는 경우가 많습니다. 이미 (customer_id, order_date)가 있다면 (customer_id)만 사용하는 별도의 인덱스는 대개 중복입니다. 복합 인덱스가 이미 첫 번째 열을 사용하는 질의를 처리할 수 있기 때문입니다.
인덱스를 하나 추가할 때마다 저장 공간을 차지하고 쓰기 작업이 느려지므로, 목표는 열마다 인덱스를 하나씩 만드는 것이 아니라 질의 패턴을 처리하는 가장 작은 인덱스 집합을 구성하는 것입니다.
EXPLAIN으로 입증하기
항상 그렇듯이 플래너의 선택을 확인하십시오. 복합 인덱스를 만든 후 EXPLAIN을 실행하고, 인덱스가 인덱스 스캔으로 표시되는지와 몇 개의 행을 추정하는지 확인하십시오.
접두사 규칙에 맞지 않는 질의가 순차 스캔으로 돌아간다면, 이는 열 순서가 작업 부하에 맞지 않는다는 증거입니다. 면접관에게 바로 그렇게 설명하면 됩니다.
EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
AND order_date >= '2026-01-01';면접에서 설명하는 방법
다음과 같이 간결하게 요약할 수 있습니다.
‘복합 인덱스는 열을 왼쪽에서 오른쪽 순서로 정렬하므로 해당 열의 왼쪽 우선 접두사는 모두 처리할 수 있지만 뒤쪽 열의 일부만 사용하는 질의는 처리할 수 없습니다. 저는 가장 많이 필터링하고 선택도가 높은 열을 첫 번째에 배치하고, 동등 비교 조건을 범위 조건보다 앞에 두며, 가능한 경우 ORDER BY와 순서를 맞춘 다음 EXPLAIN으로 확인합니다.’
빠른 확인
왼쪽 우선 접두사 규칙을 적용해 보세요.
복습: 복합 인덱스 순서
핵심 요점:
- 복합 인덱스는 왼쪽에서 오른쪽으로 정렬되며, 열의 왼쪽 우선 접두사만 지원합니다.
- 가장 자주 조회되고 선택도가 높은 열을 앞에 배치합니다.
- 동등 조건 열을 범위 조건 열보다 앞에 배치합니다.
- 일치하는 접두사는 정렬 없이
ORDER BY도 충족할 수 있습니다. - 복합 인덱스가 이미 포함하는 중복된 단일 열 인덱스는 피하고,
EXPLAIN으로 확인합니다.
다음: 힙 페치를 완전히 없애는 커버링 인덱스입니다.
자주 묻는 질문
“복합 인덱스 열 순서” 강의는 무료인가요?
네 — “복합 인덱스 열 순서” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Interview Prep 강의 전체를 잠금 해제할 수 있습니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“복합 인덱스 열 순서”에서 뭘 배우나요?
가장 왼쪽 접두사 규칙과 작업 부하에 맞는 열 순서 선택법을 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Interview Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“복합 인덱스 열 순서” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.