2012-07-23 63 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