【发布时间】:2013-01-11 09:20:29
【问题描述】:
对于一个大表(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);
我有几个索引,但一个是针对字段的:
knowledge_id;phrase_id
这在 SQLite 下运行非常快(2 秒或更短),但对于 MySQL,相同的查询大约需要 37 秒。我做错了什么?
【问题讨论】:
-
学习使用
JOIN和EXPLAIN。 (前者因为它非常适合 RA 概念,并且您不必依赖查询计划器来解开它,而后者因为它通常会指示计划的哪些部分是最昂贵的。) -
对于
direct_words表的knowledge_id, weight索引可能会有所帮助?