1

大きなテーブル (100 万レコード) の場合、次のような更新クエリがあります。

update direct_words set weight = (weight / 4) where knowledge_id = :a 
and phrase_id in (select phrase_id from phrases where knowledge_id =:b 
and phrase_class <> 6);

いくつかのインデックスがありますが、1 つはフィールド用です。

knowledge_id;phrase_id

これは SQLite では非常に高速 (2 秒以下) に実行されますが、MySQL では同じクエリに約 37 秒かかります。私は何を間違っていますか?

4

1 に答える 1

7

を使用して実行してみてくださいJOIN

update  direct_words a
        INNER JOIN phrases b
            ON a.phrase_id = b.phrase_id
set     a.weight = (a.weight / 4) 
where   a.knowledge_id = :a AND
        b.knowledge_id = :b AND
        b.phrase_class <> 6
于 2013-01-11T09:22:44.090 に答える