我很难让此更新在合理的时间内运行。注意-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/

10-17 03:08