EXPLAIN 문 이해

완료됨

EXPLAIN 문을 사용하여 쿼리 실행 계획을 표시합니다. EXPLAIN은 SELECT, INSERT, UPDATE, DELETE, VALUES, EXECUTE, DECLARE 또는 CREATE TABLE AS 문과 함께 사용할 수 있습니다.

EXPLAIN은 쿼리에 대한 실행 계획을 표시하여 PostgreSQL이 명령문을 실행하는 방법, 인덱스 사용 여부, 테이블 조인 방법 및 쿼리의 개념적 비용을 이해할 수 있도록 합니다.

EXPLAIN 구문은 다음과 같습니다.

EXPLAIN [ (parameter [, ...] ) ] statement

선택적 매개 변수는 다음과 같습니다.

  • 분석
  • VERBOSE
  • COSTS
  • BUFFERS
  • FORMAT

예를 들면 다음과 같습니다.

EXPLAIN ANALYZE SELECT * FROM category ORDER BY cat_id;

이 간단한 쿼리는 다음 정보를 반환합니다.

쿼리 플랜을 보여 주는 스크린샷

분석

이 옵션은 문을 실행하고 쿼리 계획을 반환합니다. 문의 출력은 삭제되지만 문은 여전히 실행됩니다. ROLLBACK 및 EXPLAIN ANALYZE 문을 결합하여 변경 내용이 INSERT, UPDATE 또는 DELETE와 같이 데이터베이스를 변경하는 쿼리와 함께 적용되지 않도록 할 수 있습니다. 예시:

BEGIN;

> EXPLAIN ANALYZE INSERT INTO Animal 
> (ani_id, name, weight_kg, cat_id, enc_id) 
> VALUES (28, 'Robin Robin', 0.5, 1, 2);

ROLLBACK;

VERBOSE

다음을 포함한 추가 정보를 표시합니다.

  • 플랜 트리의 각 노드에 대한 출력 열 목록
  • 스키마로 정규화된 테이블 및 함수 이름
  • 테이블 별칭과 함께 식의 변수 이름
  • 통계가 표시되는 각 트리거의 이름

COSTS

예상 시작 비용 및 총 비용과 각 행의 예상 행 수 및 예상 너비를 포함합니다.

BUFFERS

버퍼는 ANALYZE 옵션으로만 사용할 수 있습니다. PostgreSQL은 LRU(최소 최근 사용) 캐시를 사용하여 자주 사용되는 데이터를 메모리에 저장합니다. 버퍼는 캐시에서 가져온 데이터의 양과 디스크에서 검색되는 양을 표시합니다. 공유, 로컬 및 임시 블록 적중, 읽기 및 쓰기 수를 표시합니다. BUFFERS에서 제공하는 데이터는 쿼리의 I/O 집약적 부분을 이해하는 데 도움이 될 수 있습니다.

FORMAT

출력 형식을 정의합니다. XML, JSON 또는 YAML은 TEXT와 동일한 정보를 포함하지만 프로그램에서 사용하기 쉬운 형식입니다. TEXT가 기본값입니다.