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;