我很难让此更新在合理的时间内运行。注意-events_copy是事件的副本,因为我无法更新正在查询的表。
update events
set dummy = 1
where event_id in
(select event_id
from events_copy
join qualifiers using (event_id)
where type = 10);
我认为这可能是“从...创建表x”的替代方法,但是group by花费的时间太长。
select
events.*,
if(type = 10, 1, 0)
from events
left join qualifiers using (event_id)
group by event_id;
最佳答案
在更新中使用JOIN
而不是子查询:
UPDATE events a
INNER JOIN
(
SELECT DISTINCT event_id
FROM events_copy
INNER JOIN qualifiers USING (event_id)
WHERE type = 10
) b ON a.event_id = b.event_id
SET a.dummy = 1
之所以变慢,是因为子查询正在为
events
表中的每一行执行并执行联接。而是,子选择将执行一次。关于mysql - 优化MySQL子选择更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11606961/