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);
我遇到问题 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);