我有文件夹,每天大约有3000个新的csv文件进入,每个文件包含50到2000行信息。
目前,有一个流程可以一次一个地挑选这些文件,每次一行,然后将其发送到存储过程以将内容插入数据库。
这意味着在一天的过程中,在下一个3000进入之前,它很难通过3000个文件!
我正在寻求改进这个过程并提出以下想法
关于我如何看待这样做的任何其他想法?目前每个文件最多需要20秒,我真的很想提高性能。
答案 0 :(得分:3)
SQL Server批量插入可能正是您所需要的
http://msdn.microsoft.com/en-us/library/ms188365.aspx
您可能会看到所有这些插入需要很长时间的另一个问题是每次添加一行时,您的表可能会重新编制索引。像这样的搜索会提供很多关于如何通过当前程序获得更好性能的好文章 http://www.google.com/search?q=sql+insert+performance
答案 1 :(得分:1)
您可以使用SQL Server本机BCP实用程序。
有关BCP实用程序的更多信息,请访问:Importing and Exporting Bulk Data by Using the bcp Utility
答案 2 :(得分:1)
假设要导入的所有3000个文件各有2000行。这是每天600万行。瓶颈可能不在客户端进行插入,而是在数据库本身。如果在所讨论的表上启用了索引,则插入可能会很慢,具体取决于表的索引程度。有什么迹象表明你得出的结论是,数据库正在等待一些事情要做,而且这是一个滞后的导入程序,而不是相反?
答案 3 :(得分:0)
你说
目前,已有一个流程 它会在一个文件中选择这些文件 时间并一次每行 并将其发送到存储过程 将内容插入数据库。
(强调补充。)
这似乎意味着一行等于一笔交易。
修复此问题。
我猜这些听起来都像是“替换你的存储过程”。但真正的重点是减少交易数量。这些选项中的任何一个都会将此过程的交易数量从每天600万(最差情况)减少到每天3000个。