通过C#优化这个大型SQL插入的策略?
我有大约150万个文件需要在数据库中插入记录。 每个记录都插入一个包含文件名称的密钥。
问题:目前文件并非唯一标识。
所以,我们想要做的是,为每个文件:
我能想到的最好的事情是:
据我所知,这看起来是:
我无法绕过实际的文件部分,但其余部分,有没有更好的策略,我没有看到?
如果你让客户端应用程序生成ID,你可以使用一个简单的SqlBulkCopy
来一次插入所有的行。 这将在几秒钟内完成。
如果您想保留列的IDENTITY
属性,则可以运行DBCC CHECKIDENT(RESEED)
将身份计数器前进1.5米,以为您提供可插入的有保证的差距。 如果行数不是静态的,你可以用更小的数据块来执行插入,直到完成。
通过不依赖数据库为每行生成您的ID,您将减少一半的SQL语句数量。 在本地执行所有操作(包括分配ID),然后在最后执行一批插入操作,并identity_insert on
。
这将导致SQL Server为这批记录使用您的ID。
如果这仍然太慢(可能会有150万次插入),下一步就是将数据输出到文本文件(XML,逗号分隔或其他),然后对文件执行批量导入操作。
我认为,这个速度就像你能做到的一样快。
链接地址: http://www.djcxy.com/p/74285.html上一篇: Strategy to optimize this large SQL insert via C#?
下一篇: Best way to classify labeled sentences from a set of documents