2012-07-23 60 views
0

我很难让此更新在合理的时间内运行。注意 - events_copy是事件的副本,因为我无法更新我查询的表。优化MySQL Subselect更新

update events 
    set dummy = 1 
    where event_id in 
    (select event_id 
     from events_copy 
     join qualifiers using (event_id) 
     where type = 10); 

我想这可能是一个另类的“从创建表X ...”,但按需要的时间太长了。

select 
    events.*, 
    if(type = 10, 1, 0) 
    from events 
    left join qualifiers using (event_id) 
    group by event_id; 
+0

其中table是'type'字段中的?我或许能够更快地回答我的答案。 – 2012-07-23 06:00:36

+0

@ZaneBien类型在限定词 – devinpleuler 2012-07-23 12:53:19

回答

1

请使用您更新一个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表的连接。相反,子选择会执行一次。

+0

辉煌。并感谢澄清为什么它首先是缓慢的。 – devinpleuler 2012-07-23 06:08:17