私はカードゲームを持っています。ユーザーは、ホエイが勝ったゲームの数によってランク付けされます. 全体的な評価は、高速にロードできるように事前に計算されていますが、ランクの計算に関して問題があります。
ランクは次のように計算されます。
SET @userRank = 0;
UPDATE t_ratings AS r
JOIN
(
SELECT
userId, (@userRank := @userRank + 1) as rank
FROM (
SELECT
r.userId,
r.solvedCount,
r.playedCount
FROM
t_ratings AS r
ORDER BY r.solvedCount DESC , r.playedCount ASC) AS t
) AS rt
ON rt.userId = r.userId
SET r.rank = rt.rank
しかし、最近、次のエラーが時々発生するようになりました。
Deadlock found when trying to get lock; try restarting transaction
したがって、デッドロックを回避するためにユーザーランクを計算するより良い方法があるかどうか知りたいですか?