使用LINQ to SQL将具有100,000条记录的列表对象的最快方法用于SQL?
答案 0 :(得分:3)
对于海量数据,最快的方式是使用SqlBulkCopy
之类的东西将数据(通过精心设计的IDataReader
)推送到临时表(相同的布局,但是没有索引/ etc) - 然后使用SqlCommand执行存储过程以将数据从登台表推送到真实表中。但请注意,此处不涉及LINQ-to-SQL(除非您使用它来调用存储过程)。
您可以尝试使用常规LINQ-to-SQL InsertOnSubmit
- 在尝试优化数据量之前评估数据量有多大问题;即使次优,它也可能“足够快”。
您可以相当轻松地创建IDataReader
;我经常在here使用csv。要从列表中创建一个,您可以从here借用SimpleDataReader
并覆盖DoRead
。
答案 1 :(得分:1)
你可以:
MyContext.Items.InsertAllOnSubmit(
from i in list
select new Item
{
//map properties
});
聚苯乙烯。没有尝试插入那么多数据
答案 2 :(得分:0)
LINQ2SQL不支持批量插入。看看运行自己的SQL,或使用另一个支持它的框架(我记得实体框架确实如此,但我无法确定)。
答案 3 :(得分:0)
您可能希望准确指定100,000条记录来源的来源。
如果要从非数据库源检索记录,我知道插入记录的最快方法是使用InsertAllOnSubmit方法。当然,这意味着交易中有100,000个插入语句,但没有进一步的细节,在这个问题上没有多少选择。
如果要从数据库中检索记录,则在调用存储过程时性能会更好。例如,在您的存储过程中:
INSERT INTO TableA
SELECT * FROM TableB
然后,使用LINQ调用存储过程。