MySQL Оптимизация таблицы с большим количеством оценок - PullRequest
0 голосов
/ 15 марта 2011

Я пытался найти решение, но не могу найти его.

У меня есть таблица оценок постов с колонкой «рейтинг», которая равна 0 или 1, в зависимости от того, поднял ли человек большой палец вверх или вниз. В настоящее время существует около 2000 утвержденных сообщений и 2,8 миллиона оценок.

Я хотел бы найти 20 лучших постов, которые были одобрены модерацией. Вот запрос, который я думал, будет работать:

  SELECT p.* FROM `posts` p 
    LEFT JOIN `ratings` r ON r.pid=p.id 
   WHERE p.approved=1 
GROUP BY p.id 
ORDER BY AVG(r.rating) DESC LIMIT 0,20

Я добавил индекс для r.rating, и запрос все еще занимает около 3 секунд. Как сократить это время?

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Выполните некоторую буферизацию - каждый раз, когда пользователь оценивает сообщение, вставляйте одно поле в таблицу сообщений, где вы будете хранить количество оценок.Используйте таблицу оценок только, чтобы определить, проголосовал ли уже пользователь.

1 голос
/ 15 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...