为什么 Teradata 使用 .NET 插入小数和 CLOB 这么慢?

问题描述 投票:0回答:1

我有代码尝试通过 Teradata .Net 提供程序批量加载数据。我使用 TdDataAdapter 方法如下:

 using (TdDataAdapter adapter = new TdDataAdapter())
 {
     insertCommand.UpdatedRowSource = UpdateRowSource.None;
     adapter.InsertCommand = insertCommand;
     adapter.UpdateBatchSize = 1000; // Tried numerous values
     adapter.Update(dataTable);
 }

此实例中的插入命令是根据要输入的数据进行更改的。需要明确的是,代码有效,数据按预期加载,但速度非常慢。我知道我可以使用 FastLoad,但在 .Net 中使用它几乎是不可能的,但我注意到,尽管总体速度非常慢,但添加任何小数或 clob 字段都会使其速度减慢 30 倍左右。实际上令人难以置信的是它减慢了速度。一些数字:

  • 1000 行 CSV 文件,包含 20 列(1 个 Clob 和 1 个小数) - 37 秒
  • 1000 行 CSV 文件,1 列(仅限十进制)- 14 秒
  • 1000 行 CSV 文件,1 列(仅限 Clob)- 28 秒
  • 1000 行 CSV 文件,包含 18 列(无大数或小数)- 1 秒
  • 1000 行 CSV 文件,包含 19 列(无 Clob)- 21 秒
  • 1000 行 CSV 文件,包含 19 列(无小数)- 30 秒

最大的 clob 为 600 个字符,因此它并不是很大,文件本身最大为 404K。我知道我可以对这里的文本使用 VARCAHR,这不是测试的重点。有些东西导致了 Clob 和 Decimals 的巨大减慢,其他人有经历过这种情况吗?这些列定义为:

DecimalColumn DECIMAL(10,4),
ClobColumn CLOB

我尝试过在表上使用或不使用标识列,使用或不使用索引和主键等。有些东西显着减慢了速度。 .Net 命令的参数类型为

TdType.Decimal
TdType.Clob
。我再次知道我可以使用不同的数据类型,但这不是代码的重点。我需要支持这些数据类型。

ado.net teradata sql-insert
1个回答
0
投票

Teradata 或任何人对这里的原因几乎没有做出回应,所以如果您发现这一点,我发现减少此问题的唯一方法是使用临时 Double 和 VARCHAR 列,然后将数据选择到最终表中。不是很大,但速度差异很大。

© www.soinside.com 2019 - 2024. All rights reserved.