3

在这里,我正在处理一个包含数千万条记录的数据库。我有一个连接到数据库的应用程序,从表中的单个列中获取所有数据,并对它进行一些操作并更新它(对于 SQL Server - 使用游标)。

对于数百万条记录,更新需要非常非常……很长时间。所以我想通过

  1. 使用多个线程,每个线程都有一个独立的连接。

或者

  1. 通过在所有线程中使用单个连接来触发更新查询。

哪个更快,或者如果您有任何其他想法请解释。

我需要一个独立于数据库类型的解决方案,或者即使您知道每种数据库的具体解决方案,也请回复。

4

3 回答 3

4

你试图达到的加速是行不通的。相反,它会减慢整体处理速度,因为数据库现在还必须保持多个连接/会话/事务同步。

对于重复性和可比性操作,尽可能少地保留连接/事务。如果您的口味需要太长时间,则可以尝试分析是否可以以某种方式优化查询。还可以查看适合您问题的特定于数据库的扩展(即批量操作)。

于 2009-03-03T09:01:06.217 回答
0

一切都取决于数据库及其运行的硬件。

如果数据库可以利用并发处理,并避免对共享资源的争用(例如,页基锁将跨越多条记录,而基于记录则不会)。在这种情况下,共享资源包括硬件,单个核心盒将无法真正并行执行多个 CPU 密集型活动(例如解析 SQL)。

即使数据库本身无法利用并发性,网络延迟也可能有助于缓解并发插入。

与任何性能问题一样,在您的特定场景中可以替代测试。

于 2009-03-03T10:13:56.247 回答
0

如果可能,请尝试使用存储过程进行所有处理并更新记录。

于 2009-03-03T10:56:36.970 回答