使用"IN"缓慢查询MySQL

Mig*_*l E 1 mysql sql database join

对于一个大表(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);
Run Code Online (Sandbox Code Playgroud)

我有几个索引,但有一个用于字段:

knowledge_id;phrase_id
Run Code Online (Sandbox Code Playgroud)

这在SQLite(2秒或更短)下运行得非常快,但对于MySQL,相同的查询大约需要37秒.我究竟做错了什么?

Joh*_*Woo 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
Run Code Online (Sandbox Code Playgroud)