gpt4 book ai didi

影响大量行的 SQL 事务

转载 作者:行者123 更新时间:2023-12-04 06:39:48 29 4
gpt4 key购买 nike

情况如下:

一个大型生产客户端/服务器系统,其中一个中央数据库表具有某个列,该列的默认值是 NULL,但现在默认值是 0。但是在该更改之前创建的所有行当然仍然具有 null 值,这会在该系统中生成许多不必要的错误消息。

解决方案当然很简单:

update theTable set theColumn = 0 where theColumn is null

但我猜要花很多时间才能完成这笔交易?除此之外,在我做这件事之前,我还有什么需要考虑的问题吗?在整个更新过程中,这个大事务会阻塞整个数据库或特定表吗?

这个特定的表有大约 550k 行,其中 500k 有空值,将受到上述 sql 语句的影响。

最佳答案

对其他连接客户端性能的影响取决于:

  • 服务器硬件有多快
  • 包含更新语句必须更新的列的索引数量
  • 其他客户端连接到数据库的事务隔离设置

  • db 引擎会获取写锁,所以当你的客户端只需要对表进行读访问时,这应该不是什么大问题。

    500.000 条记录对我来说听起来不算太多,但正如我所说,更新所需的时间和资源取决于许多因素。

    您是否有类似的测试系统,可以在其中试用更新?

    另一种解决方案是将一个大更新拆分为许多小更新,并在循环中调用它们。

    当您有客户端频繁写入该表时,您的更新语句可能会“永远”被阻止。我见过逐行执行更新是获得更新的唯一方法的数据库。但那是一个包含大约 200.000.000 条记录和大约 500 个非常活跃的客户的表!

    关于影响大量行的 SQL 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4399739/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com