전체 용어 목록

순차 스캔

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

순차 스캔은 테이블의 모든 행을 처음부터 끝까지 읽습니다. EXPLAIN에서는 Seq Scan으로 표시되며, 작은 테이블이나 많은 행을 반환하는 쿼리에서는 일반적인 선택입니다.

순차 스캔(EXPLAIN 출력의 Seq Scan)은 테이블의 모든 페이지를 순서대로 읽고 모든 행을 쿼리 조건과 대조합니다. 인덱스가 필요 없으며, 사용할 수 있는 인덱스가 없을 때 플래너가 대신 선택하는 방식입니다.

Seq Scan이 그 자체로 문제인 것은 아닙니다. 작은 테이블이거나 쿼리가 행의 상당 부분을 반환할 때는 인덱스와 테이블을 오가는 것보다 테이블 전체를 읽는 편이 더 저렴할 수 있습니다. 문제가 되는 경우는 큰 테이블을 통째로 읽어 몇 개의 행만 반환할 때이며, 보통 필터링하는 열에 인덱스를 만들면 해결됩니다. 플래너는 테이블 통계를 바탕으로 결정하므로, 많은 데이터를 적재한 뒤에는 ANALYZE를 실행하세요.

예제

이 예제는 100,000개 행을 적재하고 ANALYZE로 통계를 수집한 다음, 인덱스가 없는 열로 필터링할 때 PostgreSQL이 어떻게 처리할지 EXPLAIN으로 확인합니다. 출력에는 Seq Scan on events가 표시됩니다.

CREATE TABLE events (id int, kind text);
INSERT INTO events
SELECT g, 'k' || (g % 10) FROM generate_series(1, 100000) AS g;
ANALYZE events;

EXPLAIN SELECT * FROM events WHERE kind = 'k3';

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

출처

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

관련 용어