Запрос, который был озвучен в первой серии, применялся для формирования блока "недавние комментарии", насколько я понял. Поскольку подпорка под него не сработала (читайте четвертую серию) блок пока убрали полностью.
Обновляется блок этих комментариев раз 200-300 в сутки, не больше - может просто его в статике сделать?
Думаем
первая серия
вторая
третья
четвертая
January 8 2009, 09:19:11 UTC 3 years ago
January 8 2009, 09:20:43 UTC 3 years ago
January 8 2009, 09:21:45 UTC 3 years ago
http://pics.livejournal.com/pro_kurator
http://pics.livejournal.com/pro_kurator
January 8 2009, 09:22:51 UTC 3 years ago
January 8 2009, 10:27:11 UTC 3 years ago
3 years ago
January 8 2009, 09:27:14 UTC 3 years ago
January 8 2009, 09:31:28 UTC 3 years ago
January 8 2009, 09:41:53 UTC 3 years ago
January 8 2009, 09:49:08 UTC 3 years ago
January 8 2009, 09:57:37 UTC 3 years ago
Тогда проще этот запрос вообще не выполнять, а последние комментарии хранить в отдельной структуре, сериализовать на диск, например, и апдейтить при появлении нового комментария. Оперативно удаляя старые при этом, конечно же.
3 years ago
3 years ago
January 8 2009, 11:28:57 UTC 3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
January 8 2009, 09:54:20 UTC 3 years ago
January 8 2009, 10:08:31 UTC 3 years ago
3 years ago
January 8 2009, 10:22:14 UTC 3 years ago
select top 50 *
from comments
order by date desc
что-то типа такого
January 8 2009, 10:23:54 UTC 3 years ago
January 8 2009, 15:32:17 UTC 3 years ago
January 8 2009, 11:19:21 UTC 3 years ago
January 8 2009, 11:38:51 UTC 3 years ago
January 8 2009, 14:01:22 UTC 3 years ago
создать отдельную таблицу lastcomments, из нее будут читаться записи для вывода в этот блок
по крону раз в N минут из всей таблицы комментариев (которая 30 Мб) вытаскивать в lastcomments небольшое кол-во комментариев. Например, за последние сутки, с условием типа insert into lastcomments select * from comments where created > NOW() - INTERVAL 1 DAY
в коде, который генерирует блок изменить таблицу comments (или как она у вас называется) на lastcomments.
January 8 2009, 18:01:01 UTC 3 years ago
January 8 2009, 18:08:43 UTC 3 years ago Edited: January 8 2009, 18:09:26 UTC
3 years ago
3 years ago
Anonymous
3 years ago
January 9 2009, 05:29:51 UTC 3 years ago
January 9 2009, 10:56:52 UTC 3 years ago
January 11 2009, 08:53:57 UTC 3 years ago
TOPIC_ID = $topic_id
, например так:
SELECT FM.*, DATE_FORMAT(FM.POST_DATE, '%d.%m.%Y %H:%i:%s') as POST_DATE
FROM b_forum_message FM
WHERE 1 = 1 AND ((FM.FORUM_ID = 8 )) AND ((FM.APPROVED = 'Y' )) and TOPIC_ID = $topic_id
, чтобы объём выбираем данных уменьшился в сотни раз (а точнее примерно в столько раз, сколько существует тем).
В переменную $topic_id перед запросом нужно записать значение идентификатора текущего топика. Его можно получить в окружении CMS или сделав дополнительный "дешёвый" запрос к базе.
Anonymous
January 20 2009, 17:41:27 UTC 3 years ago
для этого не нужно быть суперпользователем. просто explain select ...<весь тот текст>
Я уже вижу низкоселективный индекс и using filesort; Это ад, даже без ORM.
Запрос могли оставить в этом виде только из-за требований совместимости с mysql 4.0.
И решение добавить лишний индекс, тоже могли посчитать неудобным массам и забраковать. Что поделать - промышленный продукт.
Вам, возможно, поможет если переписать с подзапросом в скобках и создать дополнительный индекс.
Anonymous
3 years ago