전체 용어 목록

EXPLAIN과 EXPLAIN ANALYZE

PostgreSQL에서 EXPLAIN ANALYZE는 무슨 일을 하나요?

EXPLAIN은 PostgreSQL이 쿼리를 어떻게 실행할 계획인지 보여 주고, EXPLAIN ANALYZE는 쿼리를 실제로 실행해 각 단계의 실제 행 수와 소요 시간까지 보고합니다.

EXPLAIN은 플래너가 문에 대해 선택한 실행 전략을 출력합니다. 어떤 테이블을 어떻게 읽는지, 어떤 조인 방식을 사용하는지, 각 단계의 예상 비용과 행 수가 포함됩니다. ANALYZE 옵션을 지정하면 PostgreSQL은 문을 실제로 실행하고 예상값 옆에 실제 시간과 행 수를 추가합니다.

예상 행 수와 실제 행 수를 비교하는 것이 오래된 통계나 잘못된 접근 방식 선택을 찾아내는 가장 빠른 방법입니다. BUFFERS 옵션은 공유 메모리에서 찾은 페이지 수와 읽어야 했던 페이지 수를 추가로 보여 줍니다. EXPLAIN ANALYZE는 문을 실제로 실행하므로, 데이터를 변경하는 문을 확인만 하려면 BEGIN과 ROLLBACK으로 감싸세요.

예제

이 예제는 해당 열에 인덱스가 없는 테이블에서 이메일 주소 하나를 조회합니다. 출력에는 예상 행 수와 실제 행 수, 소요 시간, 버퍼 통계가 포함된 Seq Scan이 표시됩니다.

CREATE TABLE users (id int PRIMARY KEY, email text);
INSERT INTO users
SELECT g, 'user' || g || '@example.com' FROM generate_series(1, 50000) AS g;
ANALYZE users;

EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM users WHERE email = 'user42@example.com';

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

출처

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

관련 용어