인덱스 기초: B-tree, 복합 인덱스, 인덱스를 못 타는 조건
지금까지의 레슨은 WHERE·JOIN 이 결과를 어떻게 만드는지에 집중했습니다. 이 레슨은 그 조회가 실제로 얼마나 빨리 도는지를 정하는 인덱스를 다룹니다. 인덱스를 만들고 지우는 문법, PK·UNIQUE 제약이 자동으로 인덱스를 만드는 동작, 그리고 H2 의 EXPLAIN 으로 어떤 조건에서 인덱스를 타고 못 타는지 직접 확인합니다.
1. 왜 배우는가
테이블에 행이 몇십만 건만 쌓여도 인덱스 없이 조회하는 쿼리는 전체 행을 처음부터 끝까지 훑습니다. 이걸 풀 스캔(테이블 스캔)이라고 부르며, 조건에 맞는 행이 소수여도 나머지 행까지 다 읽고 버려야 해 느립니다.
인덱스는 특정 컬럼의 값과 그 값이 있는 행 위치를 미리 정렬해 둔 별도 구조입니다. WHERE 조건이 인덱스 컬럼과 맞으면, DB 는 전체 테이블 대신 이 정렬된 구조만 훑어 원하는 행을 빠르게 찾습니다.
문제는 인덱스를 만들어 두기만 하면 항상 빨라지는 게 아니라는 점입니다. 쿼리를 어떻게 쓰느냐에 따라 있는 인덱스를 못 타고 그대로 풀 스캔으로 떨어지기도 합니다. 이 레슨은 인덱스가 왜 빠른지, 무엇이 인덱스를 못 타게 만드는지를 H2 의 EXPLAIN 결과로 직접 확인합니다.