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を作成する」の代わりになるかもしれないと思いましたが、グループ化には時間がかかりすぎます。

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

1 に答える 1

1

JOINサブクエリではなく更新でa を使用します。

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テーブル内の各行に対して結合を実行しているためです。代わりに、副選択は 1 回実行されます。

于 2012-07-23T05:53:33.203 に答える