2014-01-14 4 views
0

Недавно я разработал мобильную игру (LAMP + memcached).Что такое таблица лучших практик с php, mysql, memcached?

В игре есть таблица результатов игрока. Таблица имеет member_id, name, score column.

Я хочу показать нашим менеджером рейтинг (глобальный рейтинг).

Только запрос SELECT * FROM score ORDER BY score DESC и показать набор результатов.

Но я не думаю, что это хороший способ. Если пользователи достигают 20 миллионов, этот запрос кажется ужасным. Какова наилучшая практика в этом случае? Не могли бы вы дать мне совет?

И как я могу проверить ранг конкретного пользователя? Я хочу показать каждый пользовательский ранг, где они есть.

+3

'SELECT * FROM score ORDER BY score DESC LIMIT 1,100' до тех пор, пока ваша база данных правильно проиндексирована, а ваши запросы« разумны », 20 миллионов записей не проблема ... пытается отобразить 20 миллионов баллов на одной веб-странице не будет «разумным» по ряду причин. –

ответ

0

Ну, вы не хотите показывать миллионы пользователей на панели лидеров?

SELECT * FROM score ORDER BY score DESC LIMIT 10 

выбрать бы топ 10

Кроме того, если вы хотите, чтобы отобразить пользователей ранга на, например, страница профиля этого следует сделать:

SELECT COUNT(*) + 1 AS rank FROM score WHERE score > (SELECT score FROM score WHERE member_id = :member_id); 

Вы просто добавить текущие пользователи member_id в последний запрос, и он будет считать все строки впереди него и добавить 1 к этому.

+0

'SELECT * FROM score ORDER BY score DESC' Если в таблице 20 миллионов пользователей, я думаю, что этот запрос повлияет на плохую производительность. не так ли? следует добавить индекс в столбец столбца? – o242

+0

Если вы рассчитываете на 20 миллионов пользователей, у вас должны быть индексы для хорошей производительности. – NewInTheBusiness

Смежные вопросы