在这里,我正在处理一个包含数千万条记录的数据库。我有一个连接到数据库的应用程序,从表中的单个列中获取所有数据,并对它进行一些操作并更新它(对于 SQL Server - 使用游标)。
对于数百万条记录,更新需要非常非常……很长时间。所以我想通过
- 使用多个线程,每个线程都有一个独立的连接。
或者
- 通过在所有线程中使用单个连接来触发更新查询。
哪个更快,或者如果您有任何其他想法请解释。
我需要一个独立于数据库类型的解决方案,或者即使您知道每种数据库的具体解决方案,也请回复。
在这里,我正在处理一个包含数千万条记录的数据库。我有一个连接到数据库的应用程序,从表中的单个列中获取所有数据,并对它进行一些操作并更新它(对于 SQL Server - 使用游标)。
对于数百万条记录,更新需要非常非常……很长时间。所以我想通过
或者
哪个更快,或者如果您有任何其他想法请解释。
我需要一个独立于数据库类型的解决方案,或者即使您知道每种数据库的具体解决方案,也请回复。
你试图达到的加速是行不通的。相反,它会减慢整体处理速度,因为数据库现在还必须保持多个连接/会话/事务同步。
对于重复性和可比性操作,尽可能少地保留连接/事务。如果您的口味需要太长时间,则可以尝试分析是否可以以某种方式优化查询。还可以查看适合您问题的特定于数据库的扩展(即批量操作)。
一切都取决于数据库及其运行的硬件。
如果数据库可以利用并发处理,并避免对共享资源的争用(例如,页基锁将跨越多条记录,而基于记录则不会)。在这种情况下,共享资源包括硬件,单个核心盒将无法真正并行执行多个 CPU 密集型活动(例如解析 SQL)。
即使数据库本身无法利用并发性,网络延迟也可能有助于缓解并发插入。
与任何性能问题一样,在您的特定场景中可以替代测试。
如果可能,请尝试使用存储过程进行所有处理并更新记录。