

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 常见问题解答
<a name="faq"></a>

查找有关调整查询性能的常见问题的答案。

## 什么是解释？
<a name="q-1"></a>

`EXPLAIN`是您在 PostgreSQL 查询（`SELECT`、、、`DELETE`）前面添加的关键字 `UPDATE``INSERT`，用于生成查询计划。PostgreSQL 查询计划详细说明了数据库打算如何运行查询。该计划包括有关表扫描顺序、索引使用和联接的信息。

使用查询计划来识别潜在的瓶颈、优化查询并提高整体性能。查看查询计划时，请考虑以下因素：
+ 表格访问方法
+ 加入方法
+ 筛选条件
+ 排序操作
+ 索引使用情况
+ 并行
+ 统计数据
+ 成本估算
+ 从每个步骤中检索到的行
+ 数据分布

[有关 EXPLAIN 的更多信息，请参阅 PostgreSQL 文档。](https://www.postgresql.org/docs/current/using-explain.html)

## 什么是 “解释分析”？
<a name="q-2"></a>

当您在查询前置`EXPLAIN ANALYZE`并运行查询时，PostgreSQL 会运行查询并返回查询计划和运行时统计信息。实际运行时间、每个步骤中处理的行以及其他相关信息与查询计划一起显示。在生产数据库`EXPLAIN ANALYZE`上使用时应谨慎行事，因为运行查询可能会影响分析期间的数据库性能。

有关 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`
+ **V** OLATILE — `VOLATILE` 函数可以做任何事情，包括修改数据库。它可以在使用相同参数的连续调用中返回不同的结果。优化器对此类函数的行为不做任何假设。使用 volatile 函数的查询将在需要其值的每一行重新评估该函数。
+ S@@ **TA** BLE — `STABLE` 函数无法修改数据库。如果单个语句中所有行的参数相同，则可以保证返回相同的结果。使用此分类时，优化器可以将函数的多个调用优化为单个调用。特别是，在索引扫描条件下使用包含此类函数的表达式是安全的。（由于索引扫描只会计算一次比较值，而不是每行计算一次，因此在索引扫描条件下使用`VOLATILE`函数是无效的。）
+ **IMMUTAB** LE — `IMMUTABLE` 函数无法修改数据库，并且在给定相同参数的情况下，可以保证永远返回相同的结果。使用此分类时，当查询使用常量参数调用函数时，优化器可以预先评估该函数。例如，`SELECT ... WHERE x = 2 + 2`可以将诸如之类的查询简化为`SELECT ... WHERE x = 4`，因为整数加法运算符底层的函数已被标记`IMMUTABLE`。

`VOLATILE`如果`CREATE FUNCTION`命令未指定类别，则为默认值。有关[函数类型的](https://www.postgresql.org/docs/16/sql-createfunction.html)更多信息，请参阅 PostgreSQL 文档。