【发布时间】:2013-04-26 22:36:03
【问题描述】:
我在一个有 300k 行的表上按 DESC 对 INT 行进行排序,并选择 @rownum:=@rownum+1 来更新同一行的 RANK 字段。
它运行良好,但需要很长时间。我可以接受更长的时间,但我可以让它休眠以给 CPU 一些空闲空间来完成其他工作吗?
就像把 sleep(0.25 sec) 放在 while(1>0) 循环中...
更新: 设置@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
【问题讨论】:
-
这听起来很误导。听起来您的查询方法可能是一个问题,因为假设您使用正确的索引,对 300K 行进行更新不应该花费那么长时间。您可以在查询中添加信息吗?
-
我已将我的查询添加到问题中
-
score列上是否有索引?explain对此查询表示什么?如果 MySQL 将这样的查询作为笛卡尔积执行,我不会感到惊讶,但这不是你应该一直做的操作。 -
@Niels 我无法对 UPDATE 查询进行解释,我认为它目前在我的 mysql 服务器(旧版本)上不存在。
标签: mysql query-optimization cpu-usage