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

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

加快速度
  1. 为每个线程使用具有独立连接的多个线程。
    1. 通过在所有线程中使用单个连接来触发更新查询。
    2. 哪一个更快,或者如果你有任何其他想法,请解释。

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

有帮助吗?

解决方案

你想要达到的加速不会起作用。相反,它会减慢整体处理速度,因为数据库现在还要保持多个连接/会话/事务同步。

保持尽可能少的连接/交易,以进行重复和可比较的操作。 如果您的品味需要太长时间,可能会尝试分析是否可以以某种方式优化查询。另请参阅适合您的问题的特定于数据库的扩展(即批量操作)。

其他提示

全部取决于数据库及其运行的硬件。

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

即使数据库本身无法利用并发性,也可以通过并发插入缓解网络延迟。

与任何性能问题一样,在您的特定情况下可以替代测试。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top