【发布时间】:2017-04-07 01:50:05
【问题描述】:
我是Teradata 的新手,幸运的是有机会处理DDL-DML 的两个语句。
我观察到的一件事是 Teradata 在处理UPDATE 具有大量记录的表中的数据时非常慢。
我在 Google 上找到的执行此更新的最简单方法是编写带有 CASE 的 INSERT-SELECT 语句,该列包含要使用新值更新的值。
但是当这种情况出现在Data Warehouse 环境中时,当我们需要从包含数百万行的表中更新多个列时怎么办?
哪种方法最好遵循?
仅INSERT-SELECT 或MERGE-UPDATE 或MLOAD ?
不确定上述任何方法是否未用于此UPDATE 操作。
提前谢谢你!
【问题讨论】:
-
如果不能使用索引,则更新需要全表扫描,但通常很快(仅更新主索引或分区列很慢,但无论如何都是不好的做法)。此外,巨大的更新可能会导致巨大的瞬态日志。表中的行数和更新行的百分比是多少?您的更新是如何编码的?
-
@Dnoeth 目前我们在事实表中有 382,851,001 # 行。但这是每周每月的增量。所以现在我们可以使用 INSERT-SELECT 方法。但是很快,由于空间限制,在我们的案例中这将失败。仅供参考,我们有不止一个列用户一个 PI 和表是一个 mutliset。通常我们需要更新不是 PI 的列。
-
任何辅助/连接索引? MERGE 通常比 UPDATE 好(可能避免假脱机)。您的更新是如何编码的?一个巨大的 Select 表还是一个源表?
-
@dnoeth,表中没有使用二级索引。更新也很简单,加入。例如:- 从事实更新事实,暗集 col1 = col2 where ...
标签: performance teradata