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

TeradataSQL-了解将查询结果插入易失性表对性能的影响,sql,teradata,Sql,Teradata,我有一个基本查询,它提取记录\u ID+关联的服务\u编号,然后是一个左连接以查找其他相关的服务\u代码。我已经确认每个子表中都有唯一的记录 explain计划将此查询的总估计时间显示为“1分钟25秒”,但是如果我在查询上包装一条CREATE MULTISET VALIATE TABLE语句,explain计划会突然显示总估计时间“72小时20分钟”。如果我仍然运行VOLATILE表创建,作业将在几分钟内完成 是什么导致了额外的加载时间?有什么方法可以减少这种情况吗?估计的时间并不是对运行所需时

我有一个基本查询,它提取记录\u ID+关联的服务\u编号,然后是一个左连接以查找其他相关的服务\u代码。我已经确认每个子表中都有唯一的记录

explain计划将此查询的总估计时间显示为“1分钟25秒”,但是如果我在查询上包装一条CREATE MULTISET VALIATE TABLE语句,explain计划会突然显示总估计时间“72小时20分钟”。如果我仍然运行VOLATILE表创建,作业将在几分钟内完成


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

估计的时间并不是对运行所需时间的估计。他们真的应该把它称为“估计成本”,因为它实际上并不表示对实际运行时的一个非常现实的估计

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


如果您只想快速加载数据而不担心下游性能,那么请为表指定
无主索引
,这样可以确保数据在所有AMP之间均匀分布。但是,当您稍后尝试将其连接到其他表时,这可能会给您带来不太好的性能。因此,考虑一下你的主要指数是一个好主意。

估计的时间实际上并不是对运行所需时间的估计。他们真的应该把它称为“估计成本”,因为它实际上并不表示对实际运行时的一个非常现实的估计

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


如果您只想快速加载数据而不担心下游性能,那么请为表指定
无主索引
,这样可以确保数据在所有AMP之间均匀分布。但是,当您稍后尝试将其连接到其他表时,这可能会给您带来不太好的性能。因此,在主索引中考虑一下是个好主意。

我想多集&缺少主索引消除倾斜会增加时间。实际上,多集使它更快,因为它不必检查重复项。然而,我认为你对主要指数的看法是正确的。有趣的是,无论我定义了什么主要指数,即使没有主要指数,估计时间也会大幅增加。这就成了一个问题,因为DBA在Teradata不允许执行我的查询之前已经定义了最大“估计时间”限制。我想多集&缺少主索引消除了偏差会增加时间。实际上,多集可以加快速度,因为它不必检查重复项。然而,我认为你对主要指数的看法是正确的。有趣的是,无论我定义了什么主要指数,即使没有主要指数,估计时间也会大幅增加。这成为一个问题,因为DBA在Teradata不允许执行我的查询之前已经定义了最大“估计时间”限制。实际上,如果您记住我们谈论的是成本估计(而不是实际时间),1分25秒不是一个可怕的估计。如果您已经看到了一个相当快的创建时间,那么选择一个好的主索引可能不会有太大的区别。与其他一些数据库平台相比,在大规模并行数据库平台中,表的删除和创建确实需要更长的时间。正如我刚才在对我的原始问题的评论中所补充的,无论我定义了什么主要指数,即使没有主要指数,都会在解释计划中显示出估计时间的大幅增加。这就成了一个问题,因为DBA在我无法提交查询执行之前已经定义了估计时间的最大限制哦,但是我要加入的第二个表可能定义了一个不好的主索引,这导致了倾斜?我来检查一下。是的,问题似乎来自于我在表中执行左联接的基础主索引。我通过在此表中创建一个新的VOLATILE表来测试这一点,该表定义了适当的主索引,现在“估计时间”已从72小时减少到17分钟。事实上,如果您记住我们谈论的是成本估计(而不是实际时间),1分25秒不是一个可怕的估计。如果您已经看到了一个相当快的创建时间,那么选择一个好的主索引可能不会有太大的区别。与其他一些数据库平台相比,在大规模并行数据库平台中,表的删除和创建确实需要更长的时间。正如我刚才在对我的原始问题的评论中所补充的,无论我定义了什么主要指数,即使没有主要指数,都会在解释计划中显示出估计时间的大幅增加。这就成了一个问题,因为DBA在我无法提交查询执行之前已经定义了估计时间的最大限制哦,但是我要加入的第二个表可能定义了一个不好的主索引,这导致了倾斜?我来检查一下。是的,问题似乎来自于我在表中执行左联接的基础主索引。我通过从该表创建一个新的VOLATILE表来测试这一点,该表定义了适当的主索引,现在是“估计时间”