

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 解釋查詢計劃
<a name="explain-query-plan"></a>

PostgreSQL 提供了返回查詢計劃的`EXPLAIN`和`EXPLAIN ANALYZE`選項，其中包含有關如何運行查詢的詳細信息。

## 解釋聲明
<a name="explain"></a>

該`EXPLAIN`語句返回 PostgreSQL 規劃師為給定語句生成的查詢計劃。查詢計劃顯示以下內容：
+ 如何掃描陳述式中涉及的表格 (例如，透過索引掃描或循序掃描)
+ 如何連接多個表（例如，哈希聯接，合併聯接或嵌套循環聯接）

了解計劃在提高查詢的效能時至關重要。瞭解計劃之後，您可以專注於查詢花費太長時間的位置，並採取行動以減少時間。

## 使用解釋分析
<a name="explain-analyze"></a>

在 PostgreSQL 中，只`EXPLAIN`會為給定的語句生成一個計劃。如果您新增`ANALYZE`關鍵字，`EXPLAIN`將傳回計劃、執行查詢，並顯示每個步驟的實際執行階段和資料列計數。這對於分析查詢性能是必不可少的。

**重要**  
使用時`EXPLAIN ANALYZE`，請注意`INSERT``UPDATE`、和`DELETE`。

## 如何閱讀解釋查詢計劃
<a name="read"></a>

*PostgreSQL 查詢計劃是由多個節點組成的樹狀結構。*查`EXPLAIN`詢計畫會顯示資料庫引擎用來執行查詢的步驟。查詢計劃提供下列資訊：
+ 執行的作業類型，例如連續掃描、索引掃描或巢狀迴圈聯結。
+ 用來描述正在執行之作業的標籤`Nested Loop`，例如、或。`Seq Scan` `Index Scan`
+ 查詢正在處理的資料表或索引的名稱。
+ 成本和資料列欄，其中包含任意計算單位中的估計成本資訊，以及處理的資料列數目。
+ 在作業上套用的任何篩選條件 (例如條件) 的篩選`where`條件。
+ 步驟的視覺化表示，每個作業都顯示為節點和連接作業的箭頭。作業的順序會從左至右顯示，較早的作業會饋送至稍後的作業。

下列螢幕擷取畫面顯示連續掃描的查詢計畫。



![\[查詢計劃顯示在 pgAdmin 的數據輸出選項卡上。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/postgresql-query-tuning/images/query-plan.png)


成本估算`(cost=0.00..32.60 rows=2260 width=8)`表示 PostgreSQL 預期查詢將需要 32.60 個計算單位才能傳回結果。

該`0.00`值是此節點可以開始工作的成本 (在本例中為查詢的啟動時間)。此`rows`值是循序掃描將傳回的預估資料列數。此`width`值是傳回資料列的預估大小 (以位元組為單位)。

由於範例顯示`EXPLAIN`的是`ANALYZE`選項，因此已執行查詢，且已擷取計時資訊。結果`(actual time=0.120..0.121 rows=1 loops=1)`意味著以下內容：
+ 順序掃描已執行一次 (`loops`值)。
+ 掃描傳回一個資料列。
+ 實際時間為 0.12 毫秒。