Performance 更新表中数据的最佳方法-Teradata

Performance 更新表中数据的最佳方法-Teradata,performance,teradata,Performance,Teradata,我不熟悉Teradata&幸运的是,我有机会同时处理DDL-DML语句 我观察到的一件事是,Teradata在更新具有大量记录的表中的数据时非常慢 我在Google上找到的执行此更新的最简单方法是在包含要用新值更新的值的列上编写一个INSERT-SELECT语句,其中包含一个CASE 但是,当这种情况出现在数据仓库环境中时,当我们需要从一个包含数百万行的表中更新多个列时,该怎么办? 哪种方法是最好的选择 INSERT-SELECTonly或MERGE-UPDATE或MLOAD 不确定上述方法是否

我不熟悉
Teradata
&幸运的是,我有机会同时处理
DDL-DML
语句

我观察到的一件事是,Teradata在更新具有大量记录的表中的数据时非常慢

我在
Google
上找到的执行此更新的最简单方法是在包含要用新值更新的值的列上编写一个
INSERT-SELECT
语句,其中包含一个
CASE

但是,当这种情况出现在
数据仓库
环境中时,当我们需要从一个包含数百万行的表中更新多个列时,该怎么办? 哪种方法是最好的选择

INSERT-SELECT
only或
MERGE-UPDATE
MLOAD

不确定上述方法是否未用于此
更新操作


提前谢谢你

在企业级,我们预计数量会很大,更新通常是某些计划作业/脚本的一部分


由于数据量巨大,更新是一项成本高昂的操作,如果更新失败(由于回退日志),可能会在一段时间内阻塞表。尽管脚本测试良好,并且在生产环境中很少发生故障,但最好将需要更新的数据以所需的形式加载到临时表中,并在删除匹配记录后插入到同一个表中,以维护SCD-1(我们不维护历史记录).

如果不能使用索引,则更新需要进行完整的表扫描,但通常速度相当快(仅更新主索引或分区列的速度很慢,但无论如何都是不好的做法)。此外,一个巨大的更新可能会导致一个巨大的暂时性Jornal。表中的行数和更新行的百分比是多少?您的更新代码是如何编码的?@Dnoeth目前事实表中有382851001行。但这是每周每月递增的。所以现在我们可以使用插入选择方法。但很快,由于空间的限制,这将在我们的案例中失败。仅供参考,我们有多个列用户,一个PI&表是一个mutliset。通常我们需要更新非PI的列。有辅助/连接索引吗?合并通常比更新好(可能避免假脱机)。你的更新编码是怎样的?巨大的Select表还是源表?@dnoeth,表中未使用二级索引。更新也是带有join的简单更新。例如:-从事实更新事实,dim set col1=col2,其中…MLOAD实用程序可用于此目的?如果是,它是否提供了更好的性能?因为我们正在讨论表上的更新,其他加载和导出实用程序将从图片中移出(快速加载、快速导出和BTEQ:不适合批量)。剩下的是MLoad或TPump。Mload在性能上优于TPump,除非更新发生在非常小的记录量上。当这种情况发生时,TPump性能可能接近Mload。Mload在块级运行,TPump在行级运行。