【问题标题】:MySQL UPDATE status from different table来自不同表的 MySQL UPDATE 状态
【发布时间】:2011-05-19 21:48:17
【问题描述】:

我有一个包含相当少量数据(25k 行)的文章表。该表有一个已发布的列(布尔值),需要根据来自外部提要的数据状态进行更新。

首先,我将所有文章的已发布 = 0。然后我将提要数据加载到一个临时表中,仅包含文章 ID 和发布 = 1。我想将发布状态设置回临时表中具有 ID 的所有文章的 1(临时表仅包含已发布的文章-- 默认情况下,如果它不在提要中,则需要取消发布)。

我现在正在使用这个:

UPDATE articles a
LEFT JOIN data_temp b
ON a.id = b.id
SET a.published = 1
WHERE b.id IS NOT null

这可行,但它真的很慢(比如我的开发服务器上慢了 200 秒)。似乎必须有一种方法可以真正快速地做到这一点。感谢您的帮助。

【问题讨论】:

  • 你为什么使用左连接?此外,临时表是否包含已发布 = 0 的任何内容?
  • 该查询与问题的描述不太相符。
  • @Jai-- 只有已发表的文章才会出现在临时表中。 @steve--不确定你的意思。

标签: mysql sql sql-update


【解决方案1】:

您是否在两个表的两个 ID 列上都有索引?如果没有,这可能会加快加入速度。

【讨论】:

  • 哇——你死在行动虾上。应该考虑到我猜,但是在添加索引时,它几乎是瞬间的。感谢您的帮助!
  • @cez-- 十分钟一到,系统允许我就去!
【解决方案2】:
UPDATE articles SET published = 1 WHERE id IN (SELECT id FROM data_temp)

既然缓存了子查询的结果,应该很快……

【讨论】:

    猜你喜欢
    • 2012-09-15
    • 2013-03-18
    • 2016-07-18
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多