Система рейтинга постов
Я бы посоветовал Вам хранить рейтинг в два этапа. Допустим голосовать можно один раз в день за любое количество постов. Тогда вам нужно две таблички:
1. Табличка с дневными данными, и соответствующая ей модель(DayVote).
 .----------------------------------------------------------------------------------------
 | ID_ПОЛЬЗОВАТЕЛЯ | ID_ПОСТА | ОЦЕНКА | ПОСМОТРЕЛ_РЕЗУЛЬТАТ |
 -----------------------------------------------------------------------------------------.
2. Табличка с агрегированными данными и соответствующая ей модель(PostVote):
 .----------------------------
 | ID_ПОСТА | ОЦЕНКА |
 -----------------------------.
Эта табличка должна заполняться по крону автоматом 1 раз в сутки, собирая и агрегируя данные из DayVote, после чего DayVote нужно очистить. 

Приимущества такого подхода:
1. Максимальное количество записей в таблицах будет равно количеству постов+ количеству проголосовавших за сегодня. А это гораздо меньше чем общее количество голосов.
2. Простота схемы данных.
3. Можно расширить DayVote служебными данными (как-то IP, USER_AGENT и т.п.), и в скрипте, обновляющем PostVote и проводить автоматический анализ и фильтрацию голосов, не боясь за то, что база разрастется.
Недостатки:
1. Усложняется процесс выбора количества голосов для поста (его теперь нужно выбирать из двух таблиц).
2. Нужно логировать запуски крон скрипта, и следить за логами, чтобы агрегирование выполнялось «гладко».
Во втором варианте сделайте 1 поле, RATING к примеру, там будете хранить либо 1, либо -1.

Затем индекс по ID_ПОСТА + SQL SUM по этому полю. В итоге все должно шустро отрабатывать, если сервер будет напрягаться, то можно попробовать кешировать или же сделать еще одну таблицу, в которую будете писать и триггером раз в N времени данные записывать в основную (из которой вы показываете данные).