我通过DESC在300k行的表上选择INT行,然后选择@rownum:= @ rownum + 1更新同一行的RANK字段。有没有办法减慢MySQL查询以降低CPU使用率?
它工作完美,但需要很长时间。我可以接受更长的时间,但是我是否可以稍微让它睡一会儿,给CPU一些空闲空间来完成其他工作?
就像把睡眠(0.25秒)在一段时间(1> 0)...循环
UPDATE: SET @ ROWNUM = 0; 更新用户u,(SELECT @rownum:= @ rownum + 1作为等级,id FROM用户u按等级DESC排序)作为bb SET u.rank = bb.rank WHERE u.id = bb.id
这听起来很不妥。这听起来像你的方法来查询可能是一个问题,因为如果使用适当的索引,更新到300K行不应该花那么长时间。你可以在你的查询中添加信息吗? – 2013-05-02 16:47:17
我已将我的查询添加到问题 – frankish 2013-05-02 16:49:05
“score”列中是否有索引?对于这个查询,“explain”是什么意思?如果MySQL执行这样的查询作为笛卡尔产品,我不会感到惊讶,但是这不是一个无论如何都应该做的操作。 – 2013-05-02 16:52:41