我遇到了MySQL查询运行速度极慢的问题。每次更新大约需要2分钟。
以下是查询:
UPDATE msn
SET is_disable = 1
WHERE mid IN
(
SELECT mid from link
WHERE rid = ${param.rid}
);所以我的问题是,如果子查询的结果是0或NULL,我想知道UPDATE语句的性能会受到怎样的影响。因为我认为这个过程可能很慢,因为子查询的结果是0或NULL。
在此之前非常感谢。
发布于 2020-10-16 10:23:37
这里的问题是,IN后面的子查询必须执行,无论它是否返回任何记录。我可能会使用exists逻辑来表达您的更新:
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表中:
CREATE INDEX idx ON link (mid, rid);您还可以尝试与此版本的索引进行比较:
CREATE INDEX idx ON link (rid, mid);https://stackoverflow.com/questions/64382027
复制相似问题