【发布时间】:2011-06-30 08:23:48
【问题描述】:
从 C# 应用程序中插入一个巨大的数组(10M 元素)的最快方法是什么?
到目前为止,我使用批量插入。 C# app 生成一个大的文本文件,我用 BULK INSERT command 加载它。出于好奇,我写了一个简单的用户定义的 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 - 330 秒(写入磁盘 + 插入) TVF - 185s
当然,这是由于写入开销,但我不知道 BULK 插入是否有任何等效的内存。
所以我的问题是 - TVF 是否比 BULK 更好(它是为大型插入创建的),还是我在这里遗漏了什么。有没有第三种选择?
【问题讨论】:
标签: sql sql-server insert clr bulkinsert