分析行计数

Vertica 允许分别通过 ANALYZE_ROW_COUNTANALYZE_EXTERNAL_ROW_COUNT 获取投影和外部表的行计数。

投影行计数

ANALYZE_ROW_COUNT 为轻量级操作,它会收集一组最少的统计数据并聚合一个投影的行计数,将其保存在数据库编录中。在许多情况下,此数据满足许多优化器对生成最佳查询计划的要求。在以下情况下,将调用此操作:

您可以通过调用 DO_TM_TASK 显式调用 ANALYZE_ROW_COUNT。例如:

=> SELECT DO_TM_TASK('analyze_row_count', 'store_orders_fact_b0');
                                              do_tm_task
------------------------------------------------------------------------------------------------------
 Task: row count analyze
(Table: public.store_orders_fact) (Projection: public.store_orders_fact_b0)

(1 row)

您可以通过设置配置参数 AnalyzeRowCountInterval 更改 Vertica 定期收集行级统计信息的时间间隔。例如,可将收集间隔更改为 1 小时(3600 秒):

=> ALTER DATABASE DEFAULT SET AnalyzeRowCountInterval = 3600;
ALTER DATABASE

外部表行计数

ANALYZE_EXTERNAL_ROW_COUNT 计算外部表的确切行数。优化器将利用该计数来优化用于访问外部表的查询。当外部表参与联接时,这会特别有用。此函数可以让优化器确定较小的表,以便用作联接的内部输入,并有助于提高查询性能。

以下查询计算外部表 loader_rejects 中的确切行数:

=> SELECT ANALYZE_EXTERNAL_ROW_COUNT('loader_rejects');
 ANALYZE_EXTERNAL_ROW_COUNT
----------------------------
                 0