

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

# 使用 Aurora DSQL EXPLAIN 計劃
<a name="working-with-explain-plans"></a>

Aurora DSQL 使用與 PostgreSQL 類似的 EXPLAIN 計劃結構，但具有反映其分散式架構和執行模型的新增金鑰。

在本文件中，我們將提供 Aurora DSQL EXPLAIN 計劃的概觀，重點介紹與 PostgreSQL 相比的相似性和差異。我們將涵蓋 Aurora DSQL 中可用的各種掃描操作類型，並協助您了解執行查詢的成本。

## PostgreSQL VS Aurora DSQL EXPLAIN 計劃
<a name="postgresql-explain-plans"></a>

 Aurora DSQL 建立在 PostgreSQL 資料庫之上，並與 PostgreSQL 共用大多數計劃結構，但具有影響查詢執行和最佳化的關鍵架構差異：


| 功能 | PostgreSQL | Aurora DSQL | 
| --- | --- | --- | 
|  資料儲存體  |  堆積儲存  |  沒有堆積，所有資料列都會以唯一識別符編製索引  | 
|  主索引鍵  |  主索引鍵索引與資料表資料不同  |  主索引鍵索引是包含所有額外資料欄做為 INCLUDE 資料欄的資料表  | 
|  次要索引  |  標準次要索引  |  運作方式與 PostgreSQL 相同，能夠包含非索引鍵資料欄  | 
|  篩選功能  |  索引條件、堆積篩選條件  |  索引條件、儲存篩選條件、查詢處理器篩選條件   | 
|  掃描類型  |  循序掃描、索引掃描、僅限索引掃描  |  完整掃描、僅限索引掃描、索引掃描  | 
|  查詢執行  |  資料庫本機  |  分散式 （運算和儲存是分開的）  | 

Aurora DSQL 會以主索引鍵順序直接存放資料表資料，而不是以個別堆積存放。每一列都由唯一索引鍵識別，通常是主索引鍵，可讓資料庫更有效率地最佳化查詢。架構差異說明在 PostgreSQL 可能選擇循序掃描的情況下，Aurora DSQL 經常使用僅限索引掃描的原因。

另一個關鍵區別在於，Aurora DSQL 會將運算與儲存區分開，讓篩選條件能更早在執行路徑中套用，以減少資料移動並改善效能。

如需搭配 PostgreSQL 使用 EXPLAIN 計劃的詳細資訊，請參閱 [PostgreSQL EXPLAIN 文件](https://www.postgresql.org/docs/current/using-explain.html)。

## Aurora DSQL EXPLAIN 計畫中的關鍵元素
<a name="explain-plan-elements"></a>

Aurora DSQL EXPLAIN 計畫提供如何執行查詢的詳細資訊，包括進行篩選的位置，以及從儲存體擷取哪些資料欄。了解此輸出可協助您最佳化查詢效能。

索引條件  
用來導覽索引的條件。最有效率的篩選，可減少掃描的資料。在 Aurora DSQL 中，索引條件可以套用至執行計畫的多層。

投影  
從儲存體擷取的資料欄。較少的投影表示效能更好。

儲存篩選條件  
在儲存層級套用的條件。比查詢處理器篩選條件更有效率。

查詢處理器篩選條件  
在查詢處理器層級套用的條件。篩選之前需要傳輸所有資料，這會導致更高的資料移動和處理額外負荷。

## Aurora DSQL 中的篩選條件
<a name="filtering-and-projection"></a>

Aurora DSQL 會將運算與儲存區分開，這表示在查詢執行期間套用篩選條件的點會對效能產生重大影響。在傳輸大量資料之前套用的篩選條件可減少延遲並改善效率。越早套用篩選條件，需要處理、移動和掃描的資料就越少，從而加快查詢速度。

Aurora DSQL 可以在查詢路徑的多個階段套用篩選條件。了解這些階段是解譯查詢計劃和最佳化效能的關鍵。


| Level | 篩選條件類型 | 描述 | 
| --- | --- | --- | 
| 1 | 索引條件 |  掃描索引時套用。限制從儲存體讀取的資料量，並減少傳送至運算層的資料。  | 
| 2 | 儲存篩選條件 | 從儲存體讀取資料之後，但在傳送至運算之前套用。這裡的範例是 索引包含資料欄上的篩選條件。減少資料傳輸，但不會減少讀取量。 | 
| 3 | 查詢處理器篩選條件 | 在資料到達運算層後套用。所有資料都必須先傳輸，這會增加延遲和成本。目前，Aurora DSQL 無法在儲存體上執行所有篩選和投影操作，因此某些查詢可能會被迫回復到這種類型的篩選。 | 