对于一个大表(1万条记录)我有一个这样的更新查询:为MySQL慢查询使用“IN”
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);
我有几个指标,但一个是对于字段:
knowledge_id;phrase_id
这在SQLite(2秒或更少)下运行速度非常快,但对于MySQL相同的查询需要大约37秒。我究竟做错了什么?
学习使用'JOIN'和'EXPLAIN'。 (前者是因为它适合RA的概念,而且不必依靠查询计划器来解开它,后者因为它通常会指示计划的哪些部分成本最高。) – 2013-01-11 09:22:26
JOIN是要走的路。 – bonCodigo
也许'direct_words'表的'knowledge_id,weight'索引可能有帮助? –