Teradata SQL - 了解将查询结果插入易失性表的性能影响

时间:2016-09-27 22:10:00

标签: sql teradata

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

解释计划将此查询的总估计时间显示为“1分25秒”,但如果我在查询中包含CREATE MULTISET VOLATILE TABLE语句,则解释计划突然显示“72小时20分钟”的总估计时间。如果我仍然运行VOLATILE TABLE创建,则作业将在一分钟内完成。

这个额外的加载时间有什么作用?有什么我可以看到减少这个吗?

1 个答案:

答案 0 :(得分:3)

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

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

如果您只想快速加载数据而不必担心下游性能,请为您的表指定NO PRIMARY INDEX,这样可以确保所有AMP均匀分布数据。但是,当您尝试将此连接到其他表时,这可能会在以后提供较少的性能。因此,将一些想法放入主要索引是个好主意。