ランクを別のテーブルに保存するのはなぜですか? 必要に応じてランクのスコアとクエリを保存するか、ビューを作成します。テーブル全体を更新するのではなく、単一のユーザーに関連するデータのみを更新する必要があります。 InnoDB テーブルを使用している場合、UPDATE クエリは、myISAM で得られるテーブルレベルのロックではなく、行レベルのロックを使用します。
TABLE users
user_id INT PK
user_name VARCHAR
...
TABLE user_scores
user_id PK FK
score INT INDEX
wins INT INDEX
VIEW v_user_ranks
SELECT u.user_id, u.user_name, s.score, s.wins
FROM users u INNER JOIN user_scores s
ON u.user_id = s.user_id
SELECT *
FROM v_user_ranks
ORDER BY score, wins DESC
LIMIT 10
INSERT INTO user_scores (user_id, score, wins)
VALUES ($id, $score, $wins)
ON DUPLICATE KEY UPDATE score=score+$score, wins=wins+$wins