我必须将大量数据插入到表中。 sqlserver 2008(与2005年相比)在这种情况下是否有增加性能的新功能?Sql server 2008 - 用于插入大量数据的性能调整功能
回答
我不知道这是否对您的问题是可行的,但如果你可以,我真的会尝试在代码中进行开发。
我对过去一个大项目,这需要进口15年值得生产数据到一个新的架构类似的问题(在SQL Server 2005) System.Data.SqlClient.SqlBulkCopy是目前为止最快的选择。
如果你这样做,我建议一次插入大约1GB的内容,然后手动调用.NET GC以释放内存中的表。我被迫做这些事情都不要碰到内存错误(32位系统,虽然)。
编辑 - 伪我solutiong是这样的:
Table dataToInsert = new Table();
var sqlCommand = new SqlCommand("select * from old database");
DataReader dataFromOldSystem = sqlCommand.ExecuteReader();
foreach (DataRow oldRow in dataFromOldSystem.Tables[0])
{
// I had to modify/transpose the row from the old table in some way
DataRow newRow = new DataRow(oldRow.GetInt(0), oldRow.GetDateTime(1), oldRow.GetInt(2));
dataToInsert.AddRow(newRow);
newRow = new DataRow(oldRow.GetInt(0), oldRow.GetDateTime(1), oldRow.GetInt(3));
dataToInsert.AddRow(newRow);
newRow = new DataRow(oldRow.GetInt(0), oldRow.GetDateTime(1), oldRow.GetInt(4));
dataToInsert.AddRow(newRow);
// check if the number of rows is over some magic number that is below the memory limit
// you can check the private bytes in use by your app to help guess this number
if (dataToInsert.Rows.Count > 1000000)
{
SqlBulkCopy bulkCopier = new BulkCopy(blah);
bulkCopier.Execute();
dataToInsert = null;
GC.Finalize();
GC.Free;
dataToInsert = new Table();
}
}
你的意思是......呼吁SQL批量复制在一个循环中,并呼吁GC免费?如果是这样,我怎样才能指定批量复制的大小为1 GB。你有没有相同的示例代码? – Relativity 2010-10-20 04:07:53
恐怕我从那时起就已经转移了工作,所以没有示例代码。就我而言,我使用了反复试验和一些有教育意义的猜测来做到这一点。 – Coxy 2010-10-20 05:28:10
我已经添加了一些伪代码,这是我开发的应用程序的基本思想。 – Coxy 2010-10-20 05:37:15
SQL Server 2008包含MERGE TSQL语句,它可以加速某些类型的组合INSERT,UPDATE和DELETE操作。
如果你打算通过代码执行,我会建议使用System.Data.SqlClient.SqlBulkCopy类(但也出现在SQL Server 2005中)。
我不是通过代码来完成的。但它是否像SqlBulkCopy fatger比normar数据库插入?如果是这样,它有多快? – Relativity 2010-10-20 02:54:46
检查数据加载性能指南http://bit.ly/9Due9T,SqlBulkCopy类本身http://bit.ly/8Xxu2R和高性能批量加载到SQL Server使用SqlBulkCopy http://bit.ly/a9KZ2l如果你仍然关注。但如果你使用TSQL然后去MERGE – 2010-10-20 08:26:59
- 1. SQL Server 2008大表性能
- 2. SQL Server 2008插入性能问题
- 3. 调整SQL Server 2008数据库最佳实践的LINQ和SQL Server性能?
- 4. Sql Server 2008性能
- 5. 性能调整 - 插入
- 6. SQL Server 2008 R2的性能
- 7. 的SQL Server 2008 FILESTREAM性能
- 8. 功能在SQL Server 2008
- 9. 从sql server中的大型数据集中筛选数据的性能调整
- 10. 大容量插入到SQL Server 2008 R2从XML RAW数据
- 11. 数组像SQL Server 2008中的功能
- 12. Table-Valued参数与插入SQL Server 2008的多个插入行性能问题
- 13. SQL Server 2008上的大容量繁重读取加载数据的性能
- 14. SQL Server 2008性能问题
- 15. sql server 2008 LIKE性能
- 16. 在SQL Server 2008 R2上插入并选择性能
- 17. SQL数据库脚本性能调整
- 18. SQL Server 2008 R2插入数据检查
- 19. 数据库中有大量表的SQL Server性能
- 20. 性能调整SQL
- 21. SQL Server数据库性能
- 22. SQL Server表值功能性能
- 23. SQL Server 2008的旋转功能
- 24. 具有FILESTREAM功能的SQL Server性能
- 25. SQL Server大容量插入
- 26. 插入从选择性能SQL Server
- 27. SQL Server +循环插入性能
- 28. 不能从SQL Server 2008中调用RICHTEXT.RichtextCtrl(在Windows 2008 Server x64)的
- 29. 的SQL Server 2008性能调整(T-SQL)中的多个LEFT JOIN表与视图
- 30. SQL Server微调功能
“我要插入大量的数据放入表格中。“ - 也许你想解释你打算怎么做;有很多方法... – 2010-10-20 02:30:53
我插入使用存储过程,其中我插入Select语句。 – Relativity 2010-10-20 02:58:23