Шапка форума (оптимизация запроса)

SeaGull

Junior Member
Шапка форума (оптимизация запроса)

На сайте несколько форумов. В шапке каждой страницы форумов выводится табличка со списком форумов, количеством сообщений (общим и новым) на каждом из них на текущий момент и времением последних сообщений. Дата для учета новых сообщений у каждого пользователя, естественно, своя.

Каждый раз при выводе шапки генерится примерно такой запрос:
PHP:
select
count(if (forum='forum_1', id, null)) as forum_1_all,
count(if ((forum='forum_1' && date > '2005-09-28 17:00:23'), id, null)) as forum_1_new,
max(if (forum='forum_1', date, 0)) as forum_1_date,

count(if (forum='forum_2', id, null)) as forum_2_all,
count(if ((forum='forum_2' && date > '2005-09-28 17:00:23'), id, null)) as forum_2_new,
max(if (forum='forum_2', date, 0)) as forum_2_date,

count(if (forum='forum_3', id, null)) as forum_3_all,
count(if ((forum='forum_3' && date > '2005-09-28 17:00:23'), id, null)) as forum_3_new,
max(if (forum='forum_3', date, 0)) as forum_3_date,

from FORUMS;
В реале форумов несколько больше.
Естественно, запрос получается не быстрый - он не кешируется и не использует индексы.

Подскажите пожалуйста, можно ли как-то оптимизировать запрос ?
Или лучше разбить его на несколько более мелких ?
 

.des.

Поставил пиво кому надо ;-)
Попробуйте так.
PHP:
# first query for all and max date
SELECT
forum,
COUNT(*) as forum_all, 
max(date) as forum_date
FROM FORUMS 
GROUP BY forum;

# and second query for new
SELECT
forum,
COUNT(*) as forum_new
FROM FORUMS 
WHERE date >  '$date'
GROUP BY forum;
Ну и соответствующие индексы добавить.
 
Сверху