优化MySQL子选择更新

时间:2012-07-23 05:36:03

标签: mysql

我很难让这个更新在合理的时间内运行。注意 - 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来自...”的替代方案,但是这个小组太长了。

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

1 个答案:

答案 0 :(得分: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表中的每一行执行连接。相反,子选择将执行一次。

相关问题