Как «облегчить» таблицу в БД, но сохранить функционал?

Здравствуйте, уважаемые программисты. Всех с новым годом! Назрел вопрос.
Есть таблица в БД с данными о голосованиях пользователей за комментарии/новости.
CREATE TABLE IF NOT EXISTS `votes` (
`id` int(11) NOT NULL,
  `id_com` int(11) NOT NULL,
  `news_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `toUserID` int(11) NOT NULL,
  `votes` varchar(1) NOT NULL,
  `dateAdd` datetime NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=671826 DEFAULT CHARSET=utf8;

Где
id_com - идентификатор комментария/новости, за который проголосовали;
news_id - идентификатор новости, в которой произошло событие;
user_id - идентификатор пользователя, который проголосовал;
toUserID - идентификатор автора комментария/новости, за который проголосовали;
votes - сам голос ( 0 - отрицательно, 1 - положительно);
dateAdd - дата события;

Суть в том, что таблица эта только наполняется и не чистится никогда и сейчас она уже хранит более 400 000 записей. Не чистится она потому, что реализован функционал, который позволяет навести на цифру с голосами и получить список пользователей, которые проголосовали. Т.е если её почистить, то этот функционал работать не будет, со старыми записями. А дальше, собственно, встает задача из названия топика. За ранее спасибо, рассмотрю любые идеи.
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 3
@sidni
Php Developer
Так Вы же ее сами денормировали чтоб быстрее данные получать, если уберете излишние данные то возможно Вы крепко потеряете на выборке данных.
А так к примеру
зачем нужен id новости, по id комментария обычно можно понять к какой новости он относится, така я же ситуация с автором комментария его тоже можно найти зная комментарий
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
1. Агрегируйте данные и выводите их из "горячей таблицы"
2. Добавьте отдельный контроллер на детализацию.
3. Парционируйте таблицу по дате, логика будет сложнее, но в первую очередь в запрос будут попадать новые оценки
4. Какие индексы висят на таблице? Если нет то создайте для всех идентификаторов по которым происходят выборки
5. меня смущает поле votes почему оно varchar ? Используйте SET или CHAR
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Вариант - только один: нормировать эту к днф3, разместив все дублированные данные по разным связанным таблицам.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы