

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# EXPLAIN 쿼리 플랜
<a name="explain-query-plan"></a>

PostgreSQL은 쿼리 실행 방법에 대한 세부 정보가 포함된 쿼리 계획을 반환하기 위한 `EXPLAIN ANALYZE` 및 옵션을 제공합니다`EXPLAIN`.

## EXPLAIN 명령문
<a name="explain"></a>

이 `EXPLAIN` 명령문은 PostgreSQL 플래너가 지정된 명령문에 대해 생성한 쿼리 계획을 반환합니다. 쿼리 계획에는 다음이 표시됩니다.
+ 명령문과 관련된 테이블을 스캔하는 방법 (예: 인덱스 스캔 또는 순차 스캔)
+ 여러 테이블을 조인하는 방법 (예: 해시 조인, 병합 조인 또는 중첩 루프 조인)

쿼리 성능을 개선하려면 계획을 이해하는 것이 중요합니다. 계획을 이해한 후에는 쿼리에 시간이 너무 오래 걸리는 부분에 집중하고 시간을 줄이기 위한 조치를 취할 수 있습니다.

## 설명 분석 사용
<a name="explain-analyze"></a>

`EXPLAIN`PostgreSQL에서는 주어진 명령문에 대한 계획만 생성합니다. `ANALYZE`키워드를 추가하면 계획이 `EXPLAIN` 반환되고 쿼리가 실행되며 각 단계의 실제 런타임과 행 수가 표시됩니다. 이는 쿼리 성능을 분석하는 데 필수적입니다.

**중요**  
사용할 때는 `EXPLAIN ANALYZE` `INSERT``UPDATE`, 및 에 주의하십시오`DELETE`.

## EXPLAIN 쿼리 계획을 읽는 방법
<a name="read"></a>

*PostgreSQL 쿼리 플랜은 여러 노드로 구성된 트리 구조입니다.* `EXPLAIN`쿼리 계획은 데이터베이스 엔진이 쿼리를 실행하는 데 사용하는 단계를 보여줍니다. 쿼리 계획은 다음 정보를 제공합니다.
+ 수행된 작업 유형 (예: 순차 스캔, 인덱스 스캔 또는 중첩 루프 조인)
+ 수행 중인 작업을 설명하는 레이블 (예: `Seq Scan` `Index Scan``Nested Loop`, 또는).
+ 쿼리로 처리 중인 테이블 또는 인덱스의 이름.
+ 임의의 계산 단위의 예상 비용 및 처리된 행 수에 대한 정보가 포함된 비용 및 행 열
+ 작업에 적용된 모든 필터의 필터 조건 (예: 조건). `where` 
+ 단계를 시각적으로 표현한 것으로, 각 작업은 작업을 연결하는 노드와 화살표로 표시됩니다. 작업 순서는 왼쪽에서 오른쪽으로 표시되며 이전 작업은 이후 작업으로 이어집니다.

다음 스크린샷은 순차 스캔의 쿼리 계획을 보여줍니다.



![\[PgAdmin의 데이터 출력 탭에 쿼리 계획이 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/postgresql-query-tuning/images/query-plan.png)


예상 비용은 PostgreSQL이 쿼리에서 결과를 반환하는 데 32.60단위의 계산이 필요할 것으로 예상한다는 `(cost=0.00..32.60 rows=2260 width=8)` 의미입니다.

`0.00`값은 이 노드가 작동을 시작할 수 있는 비용 (이 경우 쿼리 시작 시간) 입니다. `rows`값은 순차 스캔이 반환할 예상 행 수입니다. `width`값은 반환된 행의 예상 크기 (바이트) 입니다.

예제가 `EXPLAIN` `ANALYZE` 옵션과 함께 표시되기 때문에 쿼리가 실행되었고 타이밍 정보가 캡처되었습니다. 결과는 다음을 `(actual time=0.120..0.121 rows=1 loops=1)` 의미합니다.
+ 순차 스캔을 한 번 실행했습니다 (`loops`값).
+ 스캔 결과 한 행이 반환되었습니다.
+ 실제 시간은 0.12밀리초였습니다.