【问题标题】:Slow query for MySQL using "IN"使用“IN”对 MySQL 进行慢速查询
【发布时间】: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 秒。我做错了什么?

【问题讨论】:

  • 学习使用JOINEXPLAIN。 (前者因为它非常适合 RA 概念,并且您不必依赖查询计划器来解开它,而后者因为它通常会指示计划的哪些部分是最昂贵的。)
  • 对于direct_words 表的knowledge_id, weight 索引可能会有所帮助?

标签: mysql sql database join


【解决方案1】:

尝试使用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

【讨论】:

  • @bonCodigo 不是真的。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多