ユーザー ランキングを中心とした Web サイトを運営していますが、ユーザー数が 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");