IMHO: запрос ужасен
Misha v.3 26.12.2007 12:55
однако моё мнение основано на моём понимании логики работы MySQL и я возможно ошибаюсь. наверняка explain прояснит картину.
попробуйте создать простенький скрипт, который сгенерит вам БД в которой будет с тысячу пользователей, тысячи три постов и примерно столько-же рейтингов и посмотрите что станет с вашим сервером...
join таблиц, когда условие находится в IF и оно такое, что приводит к появлению огромного количества результирующих строк (кол-во rates * кол-во posts) и последующей их группировке по posts.id -- очень плохая идея.
left join тут не выход, т.к. вам нужно пристыковать для каждой записи из posts все записи из posts_rates.
я бы делал это в несколько запросов: сначала достал бы требуемые posts (наверняка тут будет ещё и разбивка по страницам), и потом бы лишь для них достал бы rates (запрос из одной таблицы с posts_rates.post_id IN (...), SUM и group_by). ну или с подзапросом.