- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从 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/
我有这张表: create table Test (Value varchar(111)) insert Test select 'a,b,c' 我想创建一个表值函数,我在其中传递 Test.Valu
在 DBMS 上下文中,TVF/UDF 之间有什么区别? 最佳答案 UDF 是 DBMS 未提供的任何函数。它代表用户定义的函数。 TVF 是一种特定类型的 UDF,即表值函数。它返回多行结果(派生表
目标: 我想在我的函数中有一个参数来允许用户输入值列表。理想情况下,最简单的解决方案...注意:我没有在数据库中创建表的权限。 情况: CREATE FUNCTION dbo.fnExample (
目标:列出所有jar中的文件。 这个有效: for f in `find . -name "*.jar"`; do jar tvf $f; done 这也行: find . -name "*.jar"
我尝试使用位置参数调用内嵌 TVF,它工作正常: SELECT MyTable.Col1, (SELECT TvfColumn FROM ufnGetData(MyTable.Col1,
我试图在同一查询中使用不同的参数调用 TVF 两次,但由于某种原因,当我将结果连接在一起时,其中一个结果会掩盖另一个结果。我已将问题简化为这个小例子: 采用此内联 TVF: CREATE FUNCTI
有谁知道是否可以使用代码优先在 Entity Framework 中使用 TVF?具体来说: 我知道目前代码优先不支持此功能(并且 EF6 看起来也不允许这样做)。另一方面,更高版本的 EF 在数据库
表值函数和 View 之间有什么区别?有没有什么事情你可以用其中一个来做,而用另一个却很难或不可能做?或者说区别在于效率? 最佳答案 无参数内联 TVF 和非物化 View 非常相似。下面是我想到的一
我“认为”这个问题与 Azure Data Lake Analytics 所做的查询优化有关;但让我们看看... 我有 2 个单独的查询 (TVF) 进行聚合,然后是最终的 Query 将这 2 个连
我有一个 jar 文件,文件上的 ls -ltr 显示了有效的文件大小和权限。当我使用 7Zip 打开此文件时,它成功打开并且 .jar 文件也包含一个有效的 MANIFEST.MF 文件。 /hom
从 C# 应用程序插入大型数组(10M 元素)的最快方法是什么? 到目前为止,我使用的是批量插入。 C# 应用程序生成一个大文本文件,我使用 BULK INSERT 命令加载它。出于好奇,我编写了一个
英孚人 我的理解是,新制作的元数据公共(public) API 将允许我们向模型中添加足够的元数据,以便 TVF 可以被调用和组合。 如果有人能指出正确的方向,我将不胜感激。如果没有 Composab
我有一个作为 SQLCLR 函数构建的表值函数,它调用远程 Web 服务上的计算。我想知道 CROSS APPLY 函数是并行调用函数还是顺序调用函数? 我不确定支持计算的网络服务是否真的是线程安全的
我是一名优秀的程序员,十分优秀!