ANALYZE - Amazon Redshift

ANALYZE

更新表统计数据以供查询计划程序使用。

所需的权限

以下是 ANALYZE 所需的权限:

  • Superuser

  • 具有 ANALYZE 权限的用户

  • 关系的拥有者

  • 向其共享表的数据库拥有者

语法

ANALYZE [ VERBOSE ] [ [ table_name [ ( column_name [, ...] ) ] ] [ PREDICATE COLUMNS | ALL COLUMNS ]

参数

VERBOSE

返回有关 ANALYZE 操作的进度信息消息的子句。在不指定表时,此选项会非常有用。

table_name

您可以分析特定表,包括临时表。您可以通过其 schema 名称来限定表。您可以视需要指定 table_name 来分析单个表。您不能在单个 ANALYZE table_name 语句中指定多个 table_name。如果您不指定 table_name 值,则将分析当前连接的数据库中的所有表,包括系统目录中的持久性表。如果自上次执行 ANALYZE 以来更改的行数百分比低于分析阈值,Amazon Redshift 将跳过对表的分析。有关更多信息,请参阅 分析阈值

您不需要分析 Amazon Redshift 系统表(STL 和 STV 表)。

column_name

如果您指定 table_name,您还可以指定表中的一个或多个列(以两旁加括号的逗号分隔列表的形式)。如果指定了列列表,则只分析列出的列。

PREDICATE COLUMNS | ALL COLUMNS

用于指示 ANALYZE 是否应仅包含谓词列的子句。指定 PREDICATE COLUMNS 以仅分析在以前查询中用作谓词的列或可能用作谓词的候选列。指定 ALL COLUMNS 将分析所有列。默认值为 ALL COLUMNS。

如果以下任意一项为 true,则列包括在一组谓词列中。

  • 该列已在查询中用作筛选条件、联接条件或 group by 子句的一部分。

  • 该列为分配键。

  • 该列为排序键的一部分。

如果未将任何列标记为谓词列(例如,由于尚未查询表),则即使指定了 PREDICATE COLUMNS,也仍将分析所有列。发生这种情况时,Amazon Redshift 可能会回复一条消息,例如,对于“table-name”找不到谓词列。请分析所有列。有关谓词列的更多信息,请参阅分析表

使用说明

Amazon Redshift 自动对使用以下命令创建的表运行 ANALYZE:

  • CREATE TABLE AS

  • CREATE TEMP TABLE AS

  • SELECT INTO

您无法分析外部表。

在最初创建这些表时,您不需要对这些表运行 ANALYZE 命令。如果修改了这些表,则应通过用来分析其他表的方式来分析这些表。

分析阈值

为了减少处理时间并提高整体系统性能,在自上次运行 ANALYZE 命令以来更改的行数百分比低于 analyze_threshold_percent 参数所指定分析阈值的情况下,Amazon Redshift 将跳过对表执行的 ANALYZE 操作。默认情况下,analyze_threshold_percent 为 10。要更改当前会话的 analyze_threshold_percent,请执行 SET 命令。以下示例将 analyze_threshold_percent 更改为 20%。

set analyze_threshold_percent to 20;

要在仅有少量行发生更改时对表进行分析,请将 analyze_threshold_percent 设置为任意较小的数字。例如,如果您将 analyze_threshold_percent 设置为 0.01,则在含有 100000000 行的表中至少有 10000 行发生更改时,不会跳过该表。

set analyze_threshold_percent to 0.01;

如果 ANALYZE 因未达到分析阈值而跳过表,Amazon Redshift 将返回以下消息。

ANALYZE SKIP

要在即使没有任何行发生更改时仍对所有表进行分析,请将 analyze_threshold_percent 设置为 0。

要查看 ANALYZE 操作的结果,请查询 STL_ANALYZE 系统表。

有关分析表的更多信息,请参阅分析表

示例

分析 TICKIT 数据库中的所有表,并返回进度信息。

analyze verbose;

只分析 LISTING 表。

analyze listing;

分析 VENUE 表中的 VENUEID 和 VENUENAME 列。

analyze venue(venueid, venuename);

仅分析 VENUE 表中的谓词列。

analyze venue predicate columns;