Помогите оптимизировать запросы

12
T
На сайте с 22.02.2008
Offline
141
820

Доброй ночи уважаемые форумчане, сайт находиться у друга на хостинге, он говорит что сайт даёт большую загрузку на базу данных, говорит оптимизируй запросы, я в этом ничего не шарю, думаю больше всего даёт нагрузку запросы с блока вывода последних сообщений с форума, помогите пожалуйста оптимизировать, если же скажете "тут и так нормально всё" буду искать другие возможные причины, спасибо заранее.

Код:

<?php

if (!defined('BLOCK_FILE')){Header("Location: ../index.php");exit;}
$limit_view_forum = 10;global $prefix, $db, $load_tpl, $forum, $block_cache; $block_cache = 1;$row = "";$result = $db->sql_query("SELECT t.topic_id, t.forum_id, t.topic_title, t.topic_last_post_id, t.topic_replies, t.topic_poster_name, p.post_id, p.poster_name FROM ".$prefix."_forum_topics AS t LEFT JOIN ".$prefix."_forum_posts AS p ON (p.post_id=t.topic_last_post_id) ORDER BY p.post_id DESC LIMIT $limit_view_forum");$nums_vews = $db->sql_numrows($result);$i = 1;$rowc = 'row1';while(list($topic_id, $forum_id, $topic_title, $topic_last_post_id, $topic_replies, $topic_poster_name, $ppost_id, $pposter_name) = $db->sql_fetchrow($result)){$pages = ceil(($topic_replies+1)/$forum['post_views_num']);$pages = ($pages>1) ? "&page=$pages" : "";$author = ($topic_poster_name!='Guest') ? "$topic_poster_name" : $topic_poster_name;$last_poster = ($pposter_name!='Guest') ? "$pposter_name" : $pposter_name;$row .= "<tr class='$rowc'><td class='borderright1'><a href='index.php?module=Forum&do=ShowTopic&id=$topic_id".$pages."#entry".($topic_replies+1)."' title='$topic_title' target='_blank'>".cut_text(stripslashes($topic_title), 5)."</a></td><td class='borderright1' align='center'>$author</td><td align='center'>$last_poster</td></tr>";$i++;$rowc = ($rowc!='row1') ? 'row1' : 'row2';}
$content = "<table width='100%' border='0' cellpadding='1' cellspacing='0'><tr><th colspan=6><center>Последние сообщения с форума<center></th></tr><tr><th>"._NEWTOPICS."</th><th width='110'>"._POSTER."</th><th width='110'>"._LASTPOSTER."</th></tr>$row</table>";
?>
Зяки-Зяки
На сайте с 08.06.2009
Offline
58
#1

тут черт ногу сломит :), но вообще, можно записывать(кэшировать) результат выборки в текстовый файл, и обновлять его раз в 10 минут - таким образом сведем нагрузку до минимума (нагрузка будет 1 раз в 10 минут), но за это пользователем будем показывать немного не актуальную информацию (возможно устаревшую на <=10 минут).

"Вы недооцениваете наших программистов. Вы живете в России. Это вам не Бангладэж. У нас могут делать всё."
T
На сайте с 22.02.2008
Offline
141
#2

Но вроде как кеширование есть $block_cache; $block_cache = 1; просто я тут ничего не понимаю, что именно можно оптимизировать

M0
На сайте с 04.02.2009
Offline
86
#3

Если вы не шарите, то каким образом решили, что именно этот запрос дает наибольшую нагрузку?🚬

T
На сайте с 22.02.2008
Offline
141
#4

я написал лишь что думаю, так как с форума как мне кажеться больше всего запросов идёт, к тому же нет блоков больше, извините, но можно не разводить флуд, а сразу конкретно

[Удален]
#5

Сам запрос не тяжелый, оптимизировать там нечего. Разве что структура БД может быть требует доработки:

Troyan:
ON*(p.post_id=t.topic_last_post_id)

Поля должны быть INT и проиндексированы.

T
На сайте с 22.02.2008
Offline
141
#6

mrFatCat, извините он тоже сказал индексируй базу, а что это значит и как это сделать? и почему поля int должны быть? спасибо

sirota77
На сайте с 08.09.2008
Offline
161
#7
Troyan:
mrFatCat, извините он тоже сказал индексируй базу, а что это значит и как это сделать? и почему поля int должны быть? спасибо

поля которые участвуют в условиях, нужно индексировать

т.е. сервер баз данных создаст копию этих полей отдельно от основной базы

это приведёт к увеличению объёма базы и её быстродействия

что и как индексировать можно задать в phpmyadmin

про эту тему в двух словах не раскажешь, читайте, учитесь

sirota77 добавил 09.12.2009 в 09:45

Troyan:
и почему поля int должны быть?

по тому, что это видимо id постов, они могут быть только целыми числами

T
На сайте с 22.02.2008
Offline
141
#8

sirota77, а можно ссылки на мануал, почитать

А по теме оптимизировано ли? или ничё нельзя сделать?

sirota77
На сайте с 08.09.2008
Offline
161
#9
Troyan:
а можно ссылки на мануал, почитать

http://www.mysql.ru/docs/man/

http://dev.mysql.com/doc/refman/5.0/en/index.html

Troyan:
А по теме оптимизировано ли?

не понял

или ничё нельзя сделать?

так не бывает

Dreammaker
На сайте с 20.04.2006
Offline
569
#10

Troyan, нужны 2 вещи: лог медленных запросов mysql и далее explain по этим запросов, до этого всё что вы делаете - это гадание на кофейной гуще.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий