繁体   English   中英

优化MySQL子选择更新

[英]Optimizing a MySQL Subselect Update

我很难让此更新在合理的时间内运行。 注意-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表中的每一行执行并执行联接。 而是,子选择将执行一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM