Teradata SQL -了解在Volatile表中插入查询结果对性能的影响



我有一个提取Record_ID +相关Service_Number的基本查询,后面跟着一个LEFT JOIN来查找额外的相关Service_Code。我已经确认每个子表中都有唯一的记录。

解释计划显示这个查询的总估计时间为"1分25秒",但是如果我在查询上包装一个CREATE MULTISET VOLATILE TABLE语句,解释计划突然显示总估计时间为"72小时20分钟"。如果我运行创建VOLATILE TABLE,那么任务将在一分钟内完成。

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

估计时间并不是对运行所需时间的真正估计。他们应该将其称为"估计成本",因为它并没有真正表明对实际运行时的远程实际估计。

在没有看到实际脚本的情况下,我猜您为volatile表选择了一个糟糕的主索引。由于Teradata是大规模并行的,因此它基于主索引在amp之间分发数据。如果您选择了一个糟糕的主索引,那么您的数据不会均匀分布,并且它可能试图将所有数据加载到单个AMP中(在最坏的情况下)。

如果你只想快速加载数据而不担心下游性能,那么为你的表指定NO PRIMARY INDEX,它将确保数据在所有amp中均匀分布。但是,当您稍后尝试将此表连接到其他表时,这可能会给您带来不太好的性能。因此,在主索引上花点心思是个好主意。

最新更新