

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

# 常見問答集
<a name="faq"></a>

尋找有關調整查詢效能的常見問題解答。

## 什麼是解釋？
<a name="q-1"></a>

`EXPLAIN`是您在 PostgreSQL 查詢 (`SELECT`、、`UPDATE``DELETE`) 前面加上以產生查詢計畫的關鍵字。`INSERT`PostgreSQL 查詢計劃詳細說明了數據庫打算如何運行查詢。此計劃包含有關資料表掃描、索引使用情況和聯結順序的資訊。

使用查詢計劃來識別潛在瓶頸、最佳化查詢並改善整體效能。複查查詢計劃時，請考慮下列因素：
+ 資料表存取方法
+ 加入方法
+ 篩選條件
+ 排序操作
+ 索引使用
+ 平行處理
+ 統計資料
+ 成本估算
+ 從每個步驟擷取的資料列
+ 資料分佈

如需有關[解釋](https://www.postgresql.org/docs/current/using-explain.html)的詳細資訊，請參閱 PostgreSQL 文件。

## 什麼是解釋分析？
<a name="q-2"></a>

當您預先加`EXPLAIN ANALYZE`入查詢並執行查詢時，PostgreSQL 會執行查詢，並傳回查詢計畫和執行階段統計資料。實際執行階段、從每個步驟處理的資料列，以及其他相關資訊會與查詢計劃一起顯示。在實際環境執行資料庫`EXPLAIN ANALYZE`上使用時，請謹慎使用，因為執行查詢可能會影響分析期間的資料庫效能。

如需有關「[解釋分析](https://www.postgresql.org/docs/current/sql-explain.html#:~:text=The%20ANALYZE%20option%20causes%20the,of%20rows%20it%20actually%20returned.)」的詳細資訊，請參閱 PostgreSQL 文件。

## 什麼是排 PostgreSQL？
<a name="q-3"></a>

在 PostgreSQL 中，定序是用於確定字符串如何比較和排序的一組規則。根據語言特定的規則和轉換，定序會定義比較中考慮字元的順序。

如需有關[定序](https://www.postgresql.org/docs/current/collation.html#:~:text=The%20collation%20feature%20allows%20specifying,be%20changed%20after%20its%20creation.)的詳細資訊，請參閱 PostgreSQL 文件。

## 什麼是 CTE？
<a name="q-4"></a>

在 PostgreSQL 資料庫中，通用資料表運算式 (CTE) 是您可以參考的已命名暫存結果集。CTE 提供了一種方法，通過將複雜的邏輯分解為更小的命名單元來創建更具可讀性和模塊化的 SQL 查詢。

如需有關 [CTE](https://www.postgresql.org/docs/current/queries-with.html) 的詳細資訊，請參閱 PostgreSQL 說明文件。

## 什麼是在 PostgreSQL 的功能類別？
<a name="1-5"></a>

每個 PostgreSQL 函數都有一個波動性分類，其可能性為 `VOLATILE``STABLE`，或：`IMMUTABLE`
+ **VO** LATION-`VOLATILE` 函數可以執行任何操作，包括修改數據庫。它可以在具有相同參數的連續調用中返回不同的結果。優化器不對此類函數的行為做任何假設。使用 volatile 函數的查詢將在需要其值的每一行重新評估該函數。
+ **穩定**-`STABLE` 函數無法修改數據庫。給定單個語句中所有行的參數相同的參數，它保證返回相同的結果。當您使用此分類時，最佳化工具可以將函數的多個呼叫最佳化為單一呼叫。特別是，在索引掃描條件中使用包含此類函數的運算式是安全的。(因為索引掃描只會評估一次比較值，而不是每一列評估一次，因此在索引掃描條件中使用`VOLATILE`函數是無效的。)
+ **不可變**-一個`IMMUTABLE`函數不能修改數據庫，並保證在給定相同參數的情況下永遠返回相同的結果。當您使用此分類時，最佳化工具可以在查詢以常數引數呼叫函式時，預先評估函數。例如，如查詢`SELECT ... WHERE x = 2 + 2`可以在視線上簡化為`SELECT ... WHERE x = 4`，因為整數加法運算子底層的函數已標記`IMMUTABLE`。

`VOLATILE`如果`CREATE FUNCTION`命令未指定類別，則為預設值。如需[函式類型](https://www.postgresql.org/docs/16/sql-createfunction.html)的詳細資訊，請參閱 PostgreSQL 文件。