gpt4 book ai didi

sql - 大型 SQL 插入 TVF 与 BULK 插入

转载 作者:行者123 更新时间:2023-12-03 02:48:41 33 4
gpt4 key购买 nike

从 C# 应用程序插入大型数组(10M 元素)的最快方法是什么?

到目前为止,我使用的是批量插入。 C# 应用程序生成一个大文本文件,我使用 BULK INSERT 命令加载它。出于好奇,我编写了一个简单的用户定义的 CLR 表值函数。

[SqlFunction(Name = "getArray", FillRowMethodName = "FillRow")]
public static IEnumerable getArray(String name)
{
return my_arrays[name]; // returns the array I want to insert into db
}

public static void FillRow(Object o, out SqlDouble sdo)
{
sdo = new SqlDouble((double)o);
}

这个查询:

INSERT INTO my_table SELECT data FROM dbo.getArray('x');

工作速度几乎比散装同类产品快 2 倍。具体结果为:

BULK - 330s (write to disk + insert) TVF - 185s

当然,这是由于写入开销造成的,但我不知道 BULK insert 是否有内存中的等效项。

所以我的问题是 - TVF 是否比 BULK(为大量插入而创建)更好,还是我在这里遗漏了一些东西。还有第三种选择吗?

最佳答案

我使用SqlBulkCopy当我确实需要最后一点性能时,这样您就可以跳过首先将其全部放入磁盘的开销。

SqlBulkCopy 接受您必须实现的 IDataReader,但只接受该接口(interface)的几个方法。我总是做的只是创建类 MyBulkCopySource : IDataReader,单击“实现接口(interface)”并将其按原样提供给 BulkCopy 以查看调用哪个方法。实现它,再试一次等​​等。您只需要实现其中四个中的三个,其余的永远不会被调用。

据我所知,这是将数据从 C# 程序泵入 SqlDB 的最快方法。

GJ

关于sql - 大型 SQL 插入 TVF 与 BULK 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6531982/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com