Я хочу отобразить 10 тем форума, посвященного vbulletin, на который было больше всего ответов на этой неделе. Поэтому я написал запрос, чтобы сосчитать все сообщения в виде временного интервала, сгруппированных по ThreadID, чтобы убедиться, что каждая нить только один раз в этом списке:MySQL Получить ответы на все темы в X дней Присоединить потоки займет около 1 секунды
SELECT post.postid, COUNT(post.postid) AS replys
FROM post
WHERE post.visible = 1
AND post.dateline > DATE_SUB("2016-01-21", INTERVAL - 7 DAY)
GROUP BY post.threadid
ORDER BY replys DESC, post.dateline DESC
LIMIT 10
Этот запрос заняла около 0,3 секунды на базу данных, где сообщений имеют около 400 000 строк и нитей около 40 000 строк, что кажется немного длинным, но все же приемлемым - также потому, что оно может быть кэшировано.
Но я также необходима некоторая информация о нити таблицы подобно Titel, которая требует объединения:
SELECT post.postid, COUNT(post.postid) AS replys,
thread.title, thread.views, thread.replycount
FROM post
INNER JOIN thread ON(thread.threadid = post.threadid)
WHERE post.visible = 1
AND post.dateline > DATE_SUB("2016-01-21", INTERVAL - 7 DAY)
GROUP BY post.threadid
ORDER BY replys DESC, post.dateline DESC
LIMIT 10
Теперь мой запрос о 1 Наталья принимает второй, который является довольно слишком много! Что я могу сделать, чтобы сделать запрос быстрее?
Информация о структуре таблиц:
сообщение
Thread