【问题标题】:How can I LIMIT the number of rows that are UPDATED in MySQL?如何限制 MySQL 中更新的行数?
【发布时间】:2021-03-23 12:20:05
【问题描述】:

这个 UPDATE 查询使我的网站崩溃,我不知道为什么。

有 39,000 行要更新,更新 3,500 行后网站崩溃了。

有没有办法将更新限制为一次执行 2,500 个更新。或者也许是一种更有效的方法?

UPDATE database_2.user 
SET 
    usergroupid = 15
WHERE userid NOT IN 
(
    SELECT vBulletinId FROM database_1.Users
);

谢谢

【问题讨论】:

  • 此 UPDATE 查询使我的网站崩溃 提供更多详细信息 - 一般而言,MySQL 操作不会影响网站。最大值 - 您可能会观察到“超时”,因为操作比设置的 MySQL 应答等待时间更长,并且网站代码决定 MySQL 挂起。
  • NOT IN 通常是性能最差的选项。尝试 LEFT JOIN 排除连接,或者 NOT EXISTS,两者都被广泛讨论

标签: mysql sql-update sql-limit


【解决方案1】:

几万行对于关系数据库来说是非常小的容量,您不应该遇到此代码的性能问题,除非您的硬件严重不足。

我仍然建议使用not exists 重写查询:

update database_2.user u2
set u2.usergroupid = 15
where not exists (select 1 from database_1.users u1 where u1.userid = u2.vBulletinId)   

这更有效,并且可以正确处理vBulletinId 中可能的null 值。为了提高性能,您需要在database_1.users(vBulletinId) 上建立索引。

【讨论】:

    【解决方案2】:

    在您的选择查询中使用 LIMIT 运算符。

    【讨论】:

    • 这是错误的!!!这将增加更新行的数量(使用NOT IN!!!),它是可能会更新必须保持不变的行。
    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多