Автор Тема: Проектирование форума  (Прочитано 13391 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« : 07 Января 2006, 15:41:09 »
Доброе время суток.
У меня тут возникли небольшие трудности с выполнением скрпита, который вытаскивает дату и имя пользователя последнего поста в теме. Т.е. сортировка тем форума по дате последнего поста: выводим имя форума, дата последнего поста, имя автора последнего поста.


SELECT t1
.* , maxt2.date ) AS lastMAXt2.pid ) AS oldert3.*, 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

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проектирование форума
« Ответ #1 : 07 Января 2006, 15:43:08 »
самое первое, что нужно сделать, это запустить свой запрос в консоли, написав перед ним слово explain
explain select ...
И смотреть, что напишет.
Хотя, и так, в общем, понятно, что нет нужных индексов на связях таблиц

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« Ответ #2 : 07 Января 2006, 16:18:39 »
А можно с этого места поподробнее...
Или что почитать?

Так что же получается что запрос правильный, это неправильно сконструирована бд. И получается  первый вариант решения наилучший?

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« Ответ #3 : 07 Января 2006, 18:02:49 »
вот что мне вывел 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

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« Ответ #4 : 10 Января 2006, 18:56:20 »
мне никто советом не поможет?

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« Ответ #5 : 11 Января 2006, 13:00:55 »
Please help.
Что мне делать с моим запросом?
Какой из вариантов выбрать?

RomikChef, да плиз конкретный ответ.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проектирование форума
« Ответ #6 : 11 Января 2006, 13:44:21 »
это значит, что индексы надо ставить.
у тебя база перебирает три таблицы
первую строку одной таблицы, и для ней - каждую строку второй таблицы. и для каждого сочетания - каждую строку третьей тбалицы.

ты думаешь, индексы для чего придумали? Для красоты?

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Проектирование форума
« Ответ #7 : 11 Января 2006, 14:32:27 »
[off]RomikChef
Кстати, со временем инфы по MySQL на phpfaq стало казаться явно мало... Мож, что-нибудь сложить туда что-нибудь как раз по запросам, индексам и проч...?[/off]
LJ: Backslashed life (rss)

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« Ответ #8 : 12 Января 2006, 23:06:05 »
Итак, нашел литературку по индексам.
Скачал кучу книг.
Вот как мне показалось неплохие ссылочки:
http://www.compdoc.ru/bd/mysql/indexuse/
http://www.podgoretsky.com/ftp/Docs/DB/MySqlManual/Indexes.html

Проставил в своей таблице индексы. Однако на быстродействие это никак не повлияло!
Может я чего-то не догоняю.
Объясните плиз нормальным (для чайника) языком, что такое индексы, с чем едят, и на что их ставят???

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« Ответ #9 : 12 Января 2006, 23:11:47 »
Вот что мне выдал EXPLAIN


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 whereUsing temporaryUsing filesort 
1 SIMPLE t2 ref i_tid i_tid 4 weare
.t1.tid 3   
1 SIMPLE t3 ALL NULL NULL NULL NULL 481   

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« Ответ #10 : 13 Января 2006, 19:41:32 »
Ап

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« Ответ #11 : 14 Января 2006, 01:14:31 »
Может кто-нить поможет советом?

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« Ответ #12 : 15 Января 2006, 22:36:35 »
начал тему 07.01.06
народ помогите?
или форум вымер на время праздников, надеюсь след неделя будет продуктивней.

С праздниками прошедшими Вас, форумчани-скриптовщики

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Проектирование форума
« Ответ #13 : 16 Января 2006, 00:36:33 »
Rodent
http://www.mysql.ru/docs/man/MySQL_indexes.html
http://www.mysql.ru/docs/optimal.html
http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
http://www.mysql.ru/docs/man/EXPLAIN.html

А про остальное тебе Ромик расскажет, не буду лезть в тему.

[off][m] Ром, ему при таком запросе целесообразно забить в индексы t1.tid, t3.pid, t2.date? А композитный t1.(forum_id+tid)? Что-то я не сильно осознал possible_keys в его explain... Что скажешь?..[/off]
LJ: Backslashed life (rss)

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Проектирование форума
« Ответ #14 : 16 Января 2006, 18:56:15 »
CGVictor
Спасибо за ссылочки.

Ждем\'с ответа RomikChef  

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28