전체 용어 목록

인덱스 스캔

PostgreSQL의 인덱스 스캔이란 무엇인가요?

인덱스 스캔은 인덱스로 일치하는 행을 찾은 다음 테이블에서 해당 행을 가져옵니다. EXPLAIN에서는 Index Scan으로 표시되며, Index Only Scan은 테이블 접근을 건너뛸 수 있습니다.

인덱스 스캔에서 PostgreSQL은 인덱스를 탐색해 쿼리 조건에 맞는 항목을 찾은 뒤 테이블에서 해당 행을 읽습니다. 기본 키로 조회하는 경우처럼 쿼리가 테이블 행의 작은 일부만 선택할 때 효율적입니다.

EXPLAIN에는 관련된 다른 접근 방식도 나타납니다. Bitmap Index Scan은 먼저 일치하는 모든 행의 위치를 모은 다음 테이블 페이지를 물리적 순서대로 읽으므로 중간 크기의 결과에 적합합니다. Index Only Scan은 필요한 모든 열이 인덱스에 있을 때 인덱스만으로 쿼리에 응답하며, 가시성 맵에서 all-visible로 표시된 페이지에 대해서는 테이블 접근을 건너뜁니다.

예제

이 예제는 기본 키가 있는 테이블을 만들고(PostgreSQL은 기본 키를 B-tree 인덱스로 구현합니다) id로 조회하는 쿼리를 EXPLAIN으로 확인합니다. 출력에는 Index Scan using orders_pkey가 표시됩니다.

CREATE TABLE orders (id int PRIMARY KEY, customer_id int, total numeric);
INSERT INTO orders
SELECT g, g % 1000, g * 1.5 FROM generate_series(1, 100000) AS g;
ANALYZE orders;

EXPLAIN SELECT * FROM orders WHERE id = 42;

확장 없이 기본 PostgreSQL 16 또는 17에서 실행되는 일반 SQL입니다. 버려도 되는 빈 데이터베이스에서 실행하세요.

출처

PostgreSQL 공식 문서(영문)입니다.

관련 용어