分析行计数
Vertica 允许分别通过 ANALYZE_ROW_COUNT 和 ANALYZE_EXTERNAL_ROW_COUNT 获取投影和外部表的行计数。
投影行计数
ANALYZE_ROW_COUNT 为轻量级操作,它会收集一组最少的统计数据并聚合一个投影的行计数,将其保存在数据库编录中。在许多情况下,此数据满足许多优化器对生成最佳查询计划的要求。在以下情况下,将调用此操作:
-
在配置参数 AnalyzeRowCountInterval 指定的时间间隔内 - 默认情况下,每天一次。
-
在负载期间。当上次记录的聚合投影行计数与当前行计数之间的差异百分比超过配置参数 ARCCommitPercentage 中的设置时,Vertica 将使用给定表的当前聚合行计数数据更新编录。
-
调用元函数 ANALYZE_STATISTICS 和 ANALYZE_STATISTICS_PARTITION 时。
您可以通过调用 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