MySQL 更新子查询慢的查询

MySQL update query where in subquery slow

我遇到问题 MySQL 查询 运行 非常慢。处理每个 UPDATE 大约需要 2 分钟。

这是查询:

   UPDATE msn
   SET is_disable = 1
   WHERE mid IN
   (
       SELECT mid from link
       WHERE rid = ${param.rid}
   );

所以我的问题是,如果子查询的结果为0或NULL,我想知道UPDATE语句的性能会受到怎样的影响。因为我觉得可能进程慢是因为子查询的结果是0或者NULL。

非常感谢。

这里的问题是 IN 之后的子查询必须执行,无论它 returns 是否有任何记录。我可能会使用现有逻辑来表达您的更新:

UPDATE msn m
SET is_disable = 1
WHERE EXISTS (SELECT 1 FROM link l WHERE m.mid = l.mid AND l.rid = ${param.rid});

然后,将以下索引添加到 link table:

CREATE INDEX idx ON link (mid, rid);

您也可以尝试与此版本的索引进行比较:

CREATE INDEX idx ON link (rid, mid);