use*_*478 2 performance sql-server-2008 sql-server
我们有一个用户导入应用程序的 CSV。
在检查 CSV、验证和应用一些业务逻辑之后,我们得到了应该在表(订阅者)中执行的插入和更新操作
我们获得了大约 100 万次插入和 100 万次更新操作。
执行它们的最有效方法是什么?
1) 对于插入,我们计划将它们放在一个 CSV 文件中并作为 BULK INSERT 执行它们。
2)我们应该为更新做些什么?有没有类似于 BULK INSERT 的东西?
3)我们还应该看看其他优化吗?
3a)例如在执行此操作时禁用索引?我们应该考虑数据库应该对应用程序的其他用户正常保持可用......
3b) 建议???
如果您通过大型导入过程从 CSV 中获取数据,我建议您使用staging table。这将允许您将所有导入的数据转储到最终用户/应用程序不会查询的临时表中。您可以使用此临时表作为您INSERT和UPDATE操作的来源。
一旦数据在临时表中,你可以踢掉一个存储过程(或多个存储过程,这取决于你的业务逻辑有多么辽阔的)做必要的INSERT和UPDATEDML语句转换为实际的查询表。
至于性能,您需要决定什么对您的实现更重要。如果您希望尽快获取表中的数据,一个非常可行的方法可能是禁用索引。但要意识到 OLAP 性能会受到影响。如果您想确保对最终用户的影响最小,那么您必须以不同的方式来解决这个问题。当你说“数据库应该保持正常可用”时,我会假设后者。
在这种情况下,性能是双刃剑。数据导入的性能很可能会影响最终用户与数据交互的性能,反之亦然。