SQL-запросы: Оптимизация выборки, как реализуется статистика?

Имеется таблица рейтинга пользователей: users_stat(id_user, total - количество очков рейтинга). Цель - определить место занимаемое определенным пользователем в рейтинге.

Погуглив, нашел следующее решение:
Делаю два запроса к базе данных:

Первым получаю рейтинг текущего пользователя(id пользователя - 4):
SELECT total FROM users_stat WHERE id_user = 4;[Он оказывается равным, например, 200 очкам рейтинга и использую его в следующем запросе]

Вторым получаю место этого пользователя в рейтинге(id пользователя - 4):
SET @x:=0;
SELECT num FROM (SELECT @x:=@x+1 num, id_user, total FROM users_stat WHERE total > 200-1 ORDER BY total DESC) num WHERE id_user = 4


Как видно из вложенного запроса, здесь происходит вывод всех записей и присвоение каждой номера из переменной x, что мне кажется не оптимизированной и ресурсозатрачиваемой операцией, например, в условии малого рейтинга текущего пользователя, в связи с чем он находится в конце списка всего рейтинга, состоящего, например, из 5000 юзеров и более.

Возможно ли как-то оптимизировать данную операцию, или же существует лучший способ реализовать рейтинг на сайте?
  • Вопрос задан
  • 2897 просмотров
Пригласить эксперта
Ответы на вопрос 1
tsarevfs
@tsarevfs
C++ developer
Мне кажется, что даже такой код будет работать за O(n)
SELECT count(*) FROM users_stat as u, user_stat as v 
WHERE u.total > v.total AND
v.user_id == 777;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы