0

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

1 回答 1

1

在更新中使用 aJOIN而不是子查询:

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表中的每一行执行连接。相反,子选择将执行一次。

于 2012-07-23T05:53:33.203 回答