Общие > Базы данных
Проектирование форума
Rodent:
Доброе время суток.
У меня тут возникли небольшие трудности с выполнением скрпита, который вытаскивает дату и имя пользователя последнего поста в теме. Т.е. сортировка тем форума по дате последнего поста: выводим имя форума, дата последнего поста, имя автора последнего поста.
SELECT t1.* , max( t2.date ) AS last, MAX( t2.pid ) AS older, t3.*, count(*)
FROM `we_topics` AS t1, `we_posts` AS t2, `we_posts` AS t3
WHERE t1.forum_id = \'$id\' AND t1.tid = t2.topic_id
GROUP BY t1.tid, t3.pid
HAVING t3.pid = older
ORDER BY t1.position desc, last DESC
LIMIT $from, $maxmess";
Что к чему относиться интуинтивно понятно, так что расписывать переменные не буду.
Структуру таблицу опишу ниже.
Так вот в чем вопрос. Раньше когда постов было не очень много, скрипт работал удовлетворительно, но теперь их стало больше, и он начинает заметно тормозить (9-15 сек) на локалке.
Теперь вопрос: Можно ли данный запрос оптимизировать?
Решения:
1. сама оптимизация запроса, возможно он написан не верно.
2. делать запросы в цикле по каждому последнему посту в данной теме
3. при каждом добалении поста, изменять дату в таблице тем.
Что подскажите??? Какой выбрать?
Заранее спасибо.
С уважением, Rodent
Меняздесьдавнонет:
самое первое, что нужно сделать, это запустить свой запрос в консоли, написав перед ним слово explain
explain select ...
И смотреть, что напишет.
Хотя, и так, в общем, понятно, что нет нужных индексов на связях таблиц
Rodent:
А можно с этого места поподробнее...
Или что почитать?
Так что же получается что запрос правильный, это неправильно сконструирована бд. И получается первый вариант решения наилучший?
Rodent:
вот что мне вывел explain
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 481 Using temporary; Using filesort
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 weare.t2.topic_id 1 Using where
1 SIMPLE t3 ALL NULL NULL NULL NULL 481
Что это значит?
Rodent:
мне никто советом не поможет?
Навигация
Перейти к полной версии