我有一个将用户排名作为中心部分的网站,但用户数量已增长到超过 50,000 人,这给服务器带来了压力,以每 5 分钟循环一次更新排名。有没有更好的方法可以用来轻松地至少每 5 分钟更新一次排名?它不必与 php 一起使用,它可能是像 perl 脚本一样运行的东西,或者如果类似的东西能够更好地完成工作(虽然我不确定为什么会这样,只是离开我的选项在这里打开)。
这是我目前更新排名的方法:
$get_users = mysql_query("SELECT id FROM users WHERE status = '1' ORDER BY month_score DESC");
$i=0;
while ($a = mysql_fetch_array($get_users)) {
$i++;
mysql_query("UPDATE users SET month_rank = '$i' WHERE id = '$a[id]'");
}
更新(解决方案):
这是解决方案代码,执行和更新所有 50,000 行所需的时间不到 1/2 秒(按照 Tom Haigh 的建议对主键进行排名)。
mysql_query("TRUNCATE TABLE userRanks");
mysql_query("INSERT INTO userRanks (userid) SELECT id FROM users WHERE status = '1' ORDER BY month_score DESC");
mysql_query("UPDATE users, userRanks SET users.month_rank = userRanks.rank WHERE users.id = userRanks.id");