powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проектирование форума
8 сообщений из 8, страница 1 из 1
Проектирование форума
    #33482895
Rodent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток.
У меня тут возникли небольшие трудности с выполнением скрпита, который вытаскивает дату и имя пользователя последнего поста в теме. Т.е. сортировка тем форума по дате последнего поста: выводим название форума, дата последнего поста, имя автора последнего поста.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
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. добавить в таблицу тем, новую колонку и при каждом добалении поста, изменять дату в ней. Но как же быть с администрированием, ведь надо будет это учитывать.
Что подскажите??? Какой выбрать?

На другом форуме, мне сказали, что нужно применять индексы. у меня их не было. EXPLAIN выдавал вот это до определения инвексов.

Код: plaintext
1.
2.
3.
4.
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 

после определения индексов

Код: plaintext
1.
2.
3.
4.
id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra   
 1  SIMPLE t1 ref PRIMARY,i_fid i_fid  3  const  1  Using where; Using temporary; Using filesort 
 1  SIMPLE t2 ref i_tid i_tid  4  weare.t1.tid  3     
 1  SIMPLE t3 ALL NULL NULL NULL NULL  481 

Помогите советом.
Заранее спасибо.
С уважением, Rodent
...
Рейтинг: 0 / 0
Проектирование форума
    #33483380
imscoc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зачем изобратеть велосипед: phpbb - очень даже функционально и бесплатно.
...
Рейтинг: 0 / 0
Проектирование форума
    #33483405
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну собственно, добавленные индексы уже сократили время исполнения запроса на пару порядков.
Вероятно, неплохо было бы добавить нужный индекс и в t3, но без описания таблиц чего-то конкретное советовать не представляется возможным.
...
Рейтинг: 0 / 0
Проектирование форума
    #33483851
Rodent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отвечу на вопросы:
1. to imscoc зачем я изобретаю велосипед? да просто хочется своего, чтобы знать откуда ручки да ножки ростут, да и с этим опыта набираешься в программировании в связке апаче, пхп, мускл. Хотя и напрягаю народ своими нерочень умными вопросамири, но для этого форму и создавался.
2. to DocAl Структура таблиц.

Таблица постов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Поле  Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно Действие 
forum_id   smallint( 5 )                               Нет   0                 
topic_id   int( 10 )                                     Нет   0                 
pid          int( 10 )                                     Нет    auto_increment              
text         text cp1251_general_ci              Да  NULL                
author     varchar( 30 ) cp1251_general_ci    Да  NULL                
date        varchar( 12 ) cp1251_general_ci    Да  NULL                
ip             varchar( 15 ) cp1251_general_ci   Да  NULL                
edit_name  varchar( 30 ) cp1251_general_ci   Да  NULL                
edit_date  varchar( 12 ) cp1251_general_ci   Да  NULL    

Индексы к ней
Код: plaintext
1.
2.
3.
4.
5.
6.
Имя ключа Тип Количество элементов Действие Поле 
PRIMARY  PRIMARY   481        pid  
i_tid      INDEX       160        topic_id  
i_fid      INDEX       6        forum_id  
i_name  INDEX        48        author   3   
i_date   INDEX       240        date   6  

Таблица тем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
   Поле  Тип   Сравнение Атрибуты Ноль По умолчанию Дополнительно Действие 
   forum_id  smallint( 5 )                               Да   NULL                
   tid          int( 10 )                                    Нет   auto_increment              
   title        varchar( 100 ) cp1251_general_ci   Да  NULL                
   descr      varchar( 100 ) cp1251_general_ci   Да  NULL                
   view       tinyint( 1 )                                 Нет   0                 
   position   tinyint( 1 )                                 Нет   0                

Индексы к ней.
Код: plaintext
1.
2.
3.
Имя ключа   Тип          Количество элементов Действие Поле 
PRIMARY      PRIMARY    158                                           tid  
i_fid            INDEX        6                                              forum_id 

Заранее спасибо за совет и помощь.
...
Рейтинг: 0 / 0
Проектирование форума
    #33485819
Rodent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посоветуйте что-нибудь.
...
Рейтинг: 0 / 0
Проектирование форума
    #33485830
Фотография Dinky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RodentПосоветуйте что-нибудь.

я обычно учусь на хороших примерах, чего и Вам советую ;)
самый лучший форум - fudforum.org - в исходниках
--
Dmitry
...
Рейтинг: 0 / 0
Проектирование форума
    #33488297
Rodent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут просмотрел исходники других форумов.
Так вот там в таблице тем (forum), постоянно обновляется номер, дата, и автор последнего поста.
А именно от этого я и хотел уйти. :-((
А тут получается, что при добавлении каждого нового поста . нужно обновлять инфу в самой таблице названия соответсвующей темы!
Неужели это единственный выход, для быстрой работы форума?
...
Рейтинг: 0 / 0
Проектирование форума
    #33488344
Фотография Dinky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rodent
Неужели это единственный выход, для быстрой работы форума?
для быстрой работы при большой нагрузке на дешевых серверах мультитабличные джоины не годятся ;) поэтому популярно кэширование...

--
Dmitry
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проектирование форума
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]