對於一個大表(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'索引可能有幫助? –