有没有办法减慢mysql查询以降低CPU使用率?

时间:2013-05-02 16:43:31

标签: mysql query-optimization cpu-usage

我通过DESC在具有300k行的表上排序INT行,并选择@rownum:= @ rownum + 1来更新同一行的RANK字段。

它工作得很好,但需要很长时间。我可以接受更长的时间,但我可以稍微让它睡一觉给CPU提供一些空间来完成其他工作吗?

喜欢将睡眠(0.25秒)放入一段时间(1> 0)循环...

更新 SET @ rownum = 0; 更新用户u,(SELECT @rownum:= @ rownum + 1作为排名,id FROM user u order by score DESC)as bb SET u.rank = bb.rank WHERE u.id = bb.id

2 个答案:

答案 0 :(得分:1)

我可能会创建一个带有自动增量ID的临时表来执行此操作。然后,您可以INSERT ... SELECT将已排序的值放入临时表中以生成排名顺序。然后,您可以通过连接更新原始表。

答案 1 :(得分:0)

没有。您可以使用insert delayed语句对优先级产生轻微影响,将low_priority添加到更新中,或者将high_priority添加到选择中。这仅影响使用它们的存储引擎中的表锁的某些排队。但是,您无法进行更精细的控制。它也不应该那样,因为DBMS将在内部平衡自身,而一个慢速查询永远不应该使另一个查询 MUCH 变慢。如果“其他工作”指的是同一台服务器上的其他任务,则只需ionicenice整个mysqld进程。

在回答了实际问题之后,您的查询可能会很慢,因为它错过了您要排序的字段上的索引,因此会触发执行计划中的filesorttemporary标记。修复可能会使整个问题没有实际意义。