Teradata SQL - 了解将查询结果插入 Volatile table 的性能影响

Teradata SQL - understanding performance impacts of inserting query results to a Volatile table

我有一个基本查询,它提取 Record_ID + 关联的 Service_Number,然后是 LEFT JOIN 以查找其他相关的 Service_Code。我已经确认每个子 table 中都有唯一的记录。

解释计划显示此查询的总估计时间为“1 分 25 秒”,但如果我在查询上包装 CREATE MULTISET VOLATILE TABLE 语句,解释计划突然显示总估计时间为“72小时20分钟”。如果我 运行 VOLATILE TABLE 创建无论如何,工作会在一分钟内完成。

是什么导致了这个额外的加载时间?我可以看看有什么可以减少这种情况的吗?

估计时间并不是真正估计 运行 需要多长时间。他们真的应该将其称为 "estimated cost",因为它并不真正表示对实际 运行 时间的远程现实估计。

在没有看到您的实际脚本的情况下,我的猜测是您为 volatile table 选择了一个错误的主索引。由于 Teradata 是大规模并行的,它会根据主索引在 AMP 之间分配您的数据。如果您选择了一个错误的主索引,那么您的数据就不会均匀分布,并且它可能会尝试将所有数据加载到单个 AMP 中(在最坏的情况下)。这可能会导致严重的缓慢。

如果您只想快速加载数据而不用担心下游性能,请为您的 table 指定 NO PRIMARY INDEX,这将确保数据在所有 AMP 中均匀分布。但是,当您稍后尝试将其加入其他 table 时,这可能会给您带来不佳的性能。因此,对您的主索引进行一些思考是个好主意。